1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-24 22:38:27 +08:00

p2p: hold lock when handling new streams

License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
This commit is contained in:
Łukasz Magiera
2018-09-05 22:13:28 +02:00
parent 87567645f4
commit d184433e6d

View File

@ -50,6 +50,7 @@ func newListenerRegistry(id peer.ID, host p2phost.Host) *ListenerRegistry {
host.SetStreamHandlerMatch("/x/", func(p string) bool { host.SetStreamHandlerMatch("/x/", func(p string) bool {
reg.RLock() reg.RLock()
defer reg.RUnlock() defer reg.RUnlock()
for _, l := range reg.Listeners { for _, l := range reg.Listeners {
if l.ListenAddress().Equal(addr) && string(l.Protocol()) == p { if l.ListenAddress().Equal(addr) && string(l.Protocol()) == p {
return true return true
@ -58,13 +59,15 @@ func newListenerRegistry(id peer.ID, host p2phost.Host) *ListenerRegistry {
return false return false
}, func(stream net.Stream) { }, func(stream net.Stream) {
reg.RLock()
defer reg.RUnlock()
for _, l := range reg.Listeners { for _, l := range reg.Listeners {
if l.ListenAddress().Equal(addr) && l.Protocol() == stream.Protocol() { if l.ListenAddress().Equal(addr) && l.Protocol() == stream.Protocol() {
l.(*remoteListener).handleStream(stream) go l.(*remoteListener).handleStream(stream)
return
} }
} }
// panic?
}) })
return reg return reg