Browse Source

networkdb: fix data races in map access

Signed-off-by: Alexander Morozov <lk4d4math@gmail.com>
Alexander Morozov 9 năm trước cách đây
mục cha
commit
392b089170
2 tập tin đã thay đổi với 6 bổ sung1 xóa
  1. 2 0
      libnetwork/networkdb/delegate.go
  2. 4 1
      libnetwork/networkdb/networkdb.go

+ 2 - 0
libnetwork/networkdb/delegate.go

@@ -221,9 +221,11 @@ func (nDB *NetworkDB) handleBulkSync(buf []byte) {
 	}
 
 	var nodeAddr net.IP
+	nDB.RLock()
 	if node, ok := nDB.nodes[bsm.NodeName]; ok {
 		nodeAddr = node.Addr
 	}
+	nDB.RUnlock()
 
 	if err := nDB.bulkSyncNode(bsm.Networks, bsm.NodeName, false); err != nil {
 		logrus.Errorf("Error in responding to bulk sync from node %s: %v", nodeAddr, err)

+ 4 - 1
libnetwork/networkdb/networkdb.go

@@ -371,7 +371,10 @@ func (nDB *NetworkDB) JoinNetwork(nid string) error {
 	nodeNetworks[nid] = &network{id: nid, ltime: ltime}
 	nodeNetworks[nid].tableBroadcasts = &memberlist.TransmitLimitedQueue{
 		NumNodes: func() int {
-			return len(nDB.networkNodes[nid])
+			nDB.RLock()
+			num := len(nDB.networkNodes[nid])
+			nDB.RUnlock()
+			return num
 		},
 		RetransmitMult: 4,
 	}