From f649d5ae6114c12d30543c13fd1caf601441ff32 Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan <mrjana@docker.com> Date: Mon, 3 Oct 2016 09:50:02 -0700 Subject: [PATCH] Do not hold ack channel in ack table after closing Once the bulksync ack channel is closed remove it from the ack table right away. There is no reason to keep it in the ack table and later delete it in the ack waiter. Ack waiter anyways has reference to the channel on which it is waiting. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com> --- libnetwork/networkdb/cluster.go | 4 ---- libnetwork/networkdb/delegate.go | 5 +++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/libnetwork/networkdb/cluster.go b/libnetwork/networkdb/cluster.go index c3bfdd4051..37bb3536f4 100644 --- a/libnetwork/networkdb/cluster.go +++ b/libnetwork/networkdb/cluster.go @@ -559,10 +559,6 @@ func (nDB *NetworkDB) bulkSyncNode(networks []string, node string, unsolicited b case <-t.C: logrus.Errorf("Bulk sync to node %s timed out", node) case <-ch: - nDB.Lock() - delete(nDB.bulkSyncAckTbl, node) - nDB.Unlock() - logrus.Debugf("%s: Bulk sync to node %s took %s", nDB.config.NodeName, node, time.Now().Sub(startTime)) } t.Stop() diff --git a/libnetwork/networkdb/delegate.go b/libnetwork/networkdb/delegate.go index eb8d18557d..e886cfcab2 100644 --- a/libnetwork/networkdb/delegate.go +++ b/libnetwork/networkdb/delegate.go @@ -318,12 +318,13 @@ func (nDB *NetworkDB) handleBulkSync(buf []byte) { // Don't respond to a bulk sync which was not unsolicited if !bsm.Unsolicited { - nDB.RLock() + nDB.Lock() ch, ok := nDB.bulkSyncAckTbl[bsm.NodeName] - nDB.RUnlock() if ok { close(ch) + delete(nDB.bulkSyncAckTbl, bsm.NodeName) } + nDB.Unlock() return }