From 98b571a524d1acdd825d12bd063cde6fe9128e51 Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan Date: Sun, 12 Jun 2016 11:58:03 -0700 Subject: [PATCH] Make sure broadcast queue is valid broadcasting When broadcasting table event, make sure the broadcast queue is valid. The network may have been removed while in the process of sending the broadcast. Signed-off-by: Jana Radhakrishnan --- libnetwork/networkdb/broadcast.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libnetwork/networkdb/broadcast.go b/libnetwork/networkdb/broadcast.go index 7008a1f431..2e07729569 100644 --- a/libnetwork/networkdb/broadcast.go +++ b/libnetwork/networkdb/broadcast.go @@ -80,10 +80,26 @@ func (nDB *NetworkDB) sendTableEvent(event TableEvent_Type, nid string, tname st return err } + var broadcastQ *memberlist.TransmitLimitedQueue nDB.RLock() - broadcastQ := nDB.networks[nDB.config.NodeName][nid].tableBroadcasts + thisNodeNetworks, ok := nDB.networks[nDB.config.NodeName] + if ok { + // The network may have been removed + network, networkOk := thisNodeNetworks[nid] + if !networkOk { + nDB.RUnlock() + return nil + } + + broadcastQ = network.tableBroadcasts + } nDB.RUnlock() + // The network may have been removed + if broadcastQ == nil { + return nil + } + broadcastQ.QueueBroadcast(&tableEventMessage{ msg: raw, id: nid,