170 похожих чатов

Всем привет! Я не очень силет в мьютексах, но старался

все предусмотреть. Подскажите где тут именно может быть гонка?
func (sub *Subscription) GetListPeers(count int64) *ListPeers {
→ var listPeers = make(ListPeers, 0, count)
→ var countPeers int64 = 0
→ hub.RLock()
→ defer hub.RUnlock()
→ priorities := sub.GetClientPriority()
→ info := sub.Peer.Info
→ mapPeers := make(map[uuid.UUID]bool)
→ for _, priority := range priorities {
→ → key := info.getKey(priority)
→ → if key == nil {
→ → → continue
→ → }
→ → for clientID, peer := range hub.Peers[sub.ClientName][sub.StreamName][key] {
→ → → if count <= countPeers {
→ → → → return &listPeers
→ → → }
→ → → if clientID == sub.Peer.PeerID {
→ → → → continue
→ → → }
→ → → if !mapPeers[peer.PeerID] && sub.isSuitablePeer(peer) {
→ → → → mapPeers[peer.PeerID] = true
→ → → → //TODO from slice to map
→ → → → listPeers = append(listPeers, peer.PeerID)
→ → → → countPeers++
→ → → }
→ → }
→ }
→ logging.Printf("INFO", "Get peers %s, %s, %s, %s, %v\n", sub.Peer.Info.IPAddress, sub.ClientName, sub.StreamName, s
→ return &listPeers
}

с флагом -race грешит именно на эту функцию
к этой функции обращается большое количество горутюн

WARNING: DATA RACE
Write at 0x00c0000504e0 by goroutine 421:
core.(*Subscription).GetListPeers()
core/client.go:133 +0x246
core.(*Subscription).readPump()
core/client.go:232 +0x1034

Previous write at 0x00c0000504e0 by goroutine 225:
core.(*Subscription).GetListPeers()
core/client.go:133 +0x246
core.(*Subscription).readPump()
core/client.go:232 +0x1034

Goroutine 421 (running) created at:
core.ServeRequest()
core/client.go:380 +0xc73
main.webSocket()
main.go:24 +0x4c
net/http.HandlerFunc.ServeHTTP()
/usr/local/go/src/net/http/server.go:1995 +0x51
net/http.(*ServeMux).ServeHTTP()
/usr/local/go/src/net/http/server.go:2375 +0x28a
net/http.serverHandler.ServeHTTP()
/usr/local/go/src/net/http/server.go:2774 +0xce
net/http.(*conn).serve()
/usr/local/go/src/net/http/server.go:1878 +0x811

Goroutine 225 (running) created at:
core.ServeRequest()
core/client.go:380 +0xc73
main.webSocket()
main.go:24 +0x4c
net/http.HandlerFunc.ServeHTTP()
/usr/local/go/src/net/http/server.go:1995 +0x51
net/http.(*ServeMux).ServeHTTP()
/usr/local/go/src/net/http/server.go:2375 +0x28a
net/http.serverHandler.ServeHTTP()
/usr/local/go/src/net/http/server.go:2774 +0xce
net/http.(*conn).serve()

3 ответов

7 просмотров

https://goplay.space

что за тип ListPeers?

А что за hub?

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта