From 0732576319658d0956fd926c6b29af19263c7ef1 Mon Sep 17 00:00:00 2001 From: vyzo Date: Mon, 12 Jul 2021 19:30:43 +0300 Subject: [PATCH] do the notification in a goroutine don't block the swarm while waiting for the semaphore. --- notify.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/notify.go b/notify.go index 6deb5aa..9a06edb 100644 --- a/notify.go +++ b/notify.go @@ -22,19 +22,21 @@ func (p *PubSubNotif) Connected(n network.Network, c network.Conn) { return } - select { - case <-p.newPeersSema: - case <-p.ctx.Done(): - return - } + go func() { + select { + case <-p.newPeersSema: + case <-p.ctx.Done(): + return + } - p.newPeersPend[c.RemotePeer()] = struct{}{} - p.newPeersSema <- struct{}{} + p.newPeersPend[c.RemotePeer()] = struct{}{} + p.newPeersSema <- struct{}{} - select { - case p.newPeers <- struct{}{}: - default: - } + select { + case p.newPeers <- struct{}{}: + default: + } + }() } func (p *PubSubNotif) Disconnected(n network.Network, c network.Conn) {