Browse Source

networkdb: fix race in access to nodes len

Signed-off-by: Alexander Morozov <lk4d4math@gmail.com>
Alexander Morozov 8 years ago
parent
commit
03088ace1b
1 changed files with 8 additions and 2 deletions
  1. 8 2
      libnetwork/networkdb/cluster.go

+ 8 - 2
libnetwork/networkdb/cluster.go

@@ -112,14 +112,20 @@ func (nDB *NetworkDB) clusterInit() error {
 
 
 	nDB.networkBroadcasts = &memberlist.TransmitLimitedQueue{
 	nDB.networkBroadcasts = &memberlist.TransmitLimitedQueue{
 		NumNodes: func() int {
 		NumNodes: func() int {
-			return len(nDB.nodes)
+			nDB.RLock()
+			num := len(nDB.nodes)
+			nDB.RUnlock()
+			return num
 		},
 		},
 		RetransmitMult: config.RetransmitMult,
 		RetransmitMult: config.RetransmitMult,
 	}
 	}
 
 
 	nDB.nodeBroadcasts = &memberlist.TransmitLimitedQueue{
 	nDB.nodeBroadcasts = &memberlist.TransmitLimitedQueue{
 		NumNodes: func() int {
 		NumNodes: func() int {
-			return len(nDB.nodes)
+			nDB.RLock()
+			num := len(nDB.nodes)
+			nDB.RUnlock()
+			return num
 		},
 		},
 		RetransmitMult: config.RetransmitMult,
 		RetransmitMult: config.RetransmitMult,
 	}
 	}