|
@@ -35,12 +35,18 @@ var (
|
|
func getNodeFromCache(nodeID string) (node models.Node, ok bool) {
|
|
func getNodeFromCache(nodeID string) (node models.Node, ok bool) {
|
|
nodeCacheMutex.RLock()
|
|
nodeCacheMutex.RLock()
|
|
node, ok = nodesCacheMap[nodeID]
|
|
node, ok = nodesCacheMap[nodeID]
|
|
|
|
+ if node.Mutex == nil {
|
|
|
|
+ node.Mutex = &sync.RWMutex{}
|
|
|
|
+ }
|
|
nodeCacheMutex.RUnlock()
|
|
nodeCacheMutex.RUnlock()
|
|
return
|
|
return
|
|
}
|
|
}
|
|
func getNodesFromCache() (nodes []models.Node) {
|
|
func getNodesFromCache() (nodes []models.Node) {
|
|
nodeCacheMutex.RLock()
|
|
nodeCacheMutex.RLock()
|
|
for _, node := range nodesCacheMap {
|
|
for _, node := range nodesCacheMap {
|
|
|
|
+ if node.Mutex == nil {
|
|
|
|
+ node.Mutex = &sync.RWMutex{}
|
|
|
|
+ }
|
|
nodes = append(nodes, node)
|
|
nodes = append(nodes, node)
|
|
}
|
|
}
|
|
nodeCacheMutex.RUnlock()
|
|
nodeCacheMutex.RUnlock()
|
|
@@ -425,6 +431,9 @@ func GetAllNodes() ([]models.Node, error) {
|
|
}
|
|
}
|
|
// add node to our array
|
|
// add node to our array
|
|
nodes = append(nodes, node)
|
|
nodes = append(nodes, node)
|
|
|
|
+ if node.Mutex == nil {
|
|
|
|
+ node.Mutex = &sync.RWMutex{}
|
|
|
|
+ }
|
|
nodesMap[node.ID.String()] = node
|
|
nodesMap[node.ID.String()] = node
|
|
}
|
|
}
|
|
|
|
|
|
@@ -811,9 +820,11 @@ func GetTagMapWithNodes() (tagNodesMap map[models.TagID][]models.Node) {
|
|
if nodeI.Tags == nil {
|
|
if nodeI.Tags == nil {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
+ nodeI.Mutex.RLock()
|
|
for nodeTagID := range nodeI.Tags {
|
|
for nodeTagID := range nodeI.Tags {
|
|
tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
|
|
tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
|
|
}
|
|
}
|
|
|
|
+ nodeI.Mutex.RUnlock()
|
|
}
|
|
}
|
|
return
|
|
return
|
|
}
|
|
}
|
|
@@ -825,9 +836,11 @@ func GetTagMapWithNodesByNetwork(netID models.NetworkID, withStaticNodes bool) (
|
|
if nodeI.Tags == nil {
|
|
if nodeI.Tags == nil {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
|
|
+ nodeI.Mutex.RLock()
|
|
for nodeTagID := range nodeI.Tags {
|
|
for nodeTagID := range nodeI.Tags {
|
|
tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
|
|
tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
|
|
}
|
|
}
|
|
|
|
+ nodeI.Mutex.RUnlock()
|
|
}
|
|
}
|
|
tagNodesMap["*"] = nodes
|
|
tagNodesMap["*"] = nodes
|
|
if !withStaticNodes {
|
|
if !withStaticNodes {
|