From d8dd49cb84204a1e2965b385f7a54ae1abe688bb Mon Sep 17 00:00:00 2001 From: gammazero <11790789+gammazero@users.noreply.github.com> Date: Thu, 27 Feb 2025 14:07:43 -1000 Subject: [PATCH] minimize peermanager lock scope --- .../client/internal/peermanager/peermanager.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/bitswap/client/internal/peermanager/peermanager.go b/bitswap/client/internal/peermanager/peermanager.go index e8519a275..28e822652 100644 --- a/bitswap/client/internal/peermanager/peermanager.go +++ b/bitswap/client/internal/peermanager/peermanager.go @@ -82,13 +82,13 @@ func (pm *PeerManager) ConnectedPeers() []peer.ID { // of wants. func (pm *PeerManager) Connected(p peer.ID) { pm.pqLk.Lock() - defer pm.pqLk.Unlock() pq := pm.getOrCreate(p) - // Inform the peer want manager that there's a new peer pm.pwm.addPeer(pq, p) + pm.pqLk.Unlock() + // Inform the sessions that the peer has connected pm.signalAvailability(p, true) } @@ -96,21 +96,22 @@ func (pm *PeerManager) Connected(p peer.ID) { // Disconnected is called to remove a peer from the pool. func (pm *PeerManager) Disconnected(p peer.ID) { pm.pqLk.Lock() - defer pm.pqLk.Unlock() pq, ok := pm.peerQueues[p] - if !ok { + pm.pqLk.Unlock() return } + // Clean up the peer + delete(pm.peerQueues, p) + pm.pwm.removePeer(p) + + pm.pqLk.Unlock() // Inform the sessions that the peer has disconnected pm.signalAvailability(p, false) - // Clean up the peer - delete(pm.peerQueues, p) pq.Shutdown() - pm.pwm.removePeer(p) } // ResponseReceived is called when a message is received from the network.