From 4e0ada9ea32521c67cfb7722730a10df77f86790 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Thu, 2 Jan 2020 18:01:42 +0100 Subject: [PATCH] routing: clean up locking on topology change --- routing/notifications.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/routing/notifications.go b/routing/notifications.go index 4d64b436..2014121c 100644 --- a/routing/notifications.go +++ b/routing/notifications.go @@ -118,10 +118,9 @@ type topologyClient struct { // graph topology in a non-blocking. func (r *ChannelRouter) notifyTopologyChange(topologyDiff *TopologyChange) { r.RLock() - numClients := len(r.topologyClients) - r.RUnlock() + defer r.RUnlock() - // Do not reacquire the lock twice unnecessarily. + numClients := len(r.topologyClients) if numClients == 0 { return } @@ -133,7 +132,6 @@ func (r *ChannelRouter) notifyTopologyChange(topologyDiff *TopologyChange) { }), ) - r.RLock() for _, client := range r.topologyClients { client.wg.Add(1) @@ -157,7 +155,6 @@ func (r *ChannelRouter) notifyTopologyChange(topologyDiff *TopologyChange) { } }(client) } - r.RUnlock() } // TopologyChange represents a new set of modifications to the channel graph.