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 <mrjana@docker.com>
This commit is contained in:
Jana Radhakrishnan 2016-06-12 11:58:03 -07:00
parent 08014eadb6
commit 98b571a524
1 changed files with 17 additions and 1 deletions

View File

@ -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,