From d184433e6ddf8f18514ede840ce2f825265a704d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Wed, 5 Sep 2018 22:13:28 +0200 Subject: [PATCH] p2p: hold lock when handling new streams MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit License: MIT Signed-off-by: Ɓukasz Magiera --- p2p/listener.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/p2p/listener.go b/p2p/listener.go index 2205683da..c33486180 100644 --- a/p2p/listener.go +++ b/p2p/listener.go @@ -50,6 +50,7 @@ func newListenerRegistry(id peer.ID, host p2phost.Host) *ListenerRegistry { host.SetStreamHandlerMatch("/x/", func(p string) bool { reg.RLock() defer reg.RUnlock() + for _, l := range reg.Listeners { if l.ListenAddress().Equal(addr) && string(l.Protocol()) == p { return true @@ -58,13 +59,15 @@ func newListenerRegistry(id peer.ID, host p2phost.Host) *ListenerRegistry { return false }, func(stream net.Stream) { + reg.RLock() + defer reg.RUnlock() + for _, l := range reg.Listeners { if l.ListenAddress().Equal(addr) && l.Protocol() == stream.Protocol() { - l.(*remoteListener).handleStream(stream) + go l.(*remoteListener).handleStream(stream) + return } } - - // panic? }) return reg