浏览代码

Merge pull request #1249 from mrjana/networkdb

Make sure broadcast queue is valid broadcasting
Alessandro Boch 9 年之前
父节点
当前提交
cbbadbec22
共有 1 个文件被更改,包括 17 次插入1 次删除
  1. 17 1
      libnetwork/networkdb/broadcast.go

+ 17 - 1
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,