Skip to content

Commit ce50b96

Browse files
committed
add peer mutex
1 parent 9269836 commit ce50b96

File tree

3 files changed

+47
-16
lines changed

3 files changed

+47
-16
lines changed

logic/acls.go

+31-12
Original file line numberDiff line numberDiff line change
@@ -575,12 +575,22 @@ func IsPeerAllowed(node, peer models.Node, checkDefaultPolicy bool) bool {
575575
if peer.IsStatic {
576576
peer = peer.StaticNode.ConvertToStaticNode()
577577
}
578-
node.Mutex.Lock()
579-
nodeTags := maps.Clone(node.Tags)
580-
node.Mutex.Unlock()
581-
peer.Mutex.Lock()
582-
peerTags := maps.Clone(peer.Tags)
583-
peer.Mutex.Unlock()
578+
var nodeTags, peerTags map[models.TagID]struct{}
579+
if node.Mutex != nil {
580+
node.Mutex.Lock()
581+
nodeTags = maps.Clone(node.Tags)
582+
node.Mutex.Unlock()
583+
} else {
584+
nodeTags = node.Tags
585+
}
586+
if peer.Mutex != nil {
587+
peer.Mutex.Lock()
588+
peerTags = maps.Clone(peer.Tags)
589+
peer.Mutex.Unlock()
590+
} else {
591+
peerTags = peer.Tags
592+
}
593+
584594
if checkDefaultPolicy {
585595
// check default policy if all allowed return true
586596
defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)
@@ -662,12 +672,21 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool)
662672
if peer.IsStatic {
663673
peer = peer.StaticNode.ConvertToStaticNode()
664674
}
665-
node.Mutex.Lock()
666-
nodeTags := maps.Clone(node.Tags)
667-
node.Mutex.Unlock()
668-
peer.Mutex.Lock()
669-
peerTags := maps.Clone(peer.Tags)
670-
peer.Mutex.Unlock()
675+
var nodeTags, peerTags map[models.TagID]struct{}
676+
if node.Mutex != nil {
677+
node.Mutex.Lock()
678+
nodeTags = maps.Clone(node.Tags)
679+
node.Mutex.Unlock()
680+
} else {
681+
nodeTags = node.Tags
682+
}
683+
if peer.Mutex != nil {
684+
peer.Mutex.Lock()
685+
peerTags = maps.Clone(peer.Tags)
686+
peer.Mutex.Unlock()
687+
} else {
688+
peerTags = peer.Tags
689+
}
671690
if checkDefaultPolicy {
672691
// check default policy if all allowed return true
673692
defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy)

logic/nodes.go

+13-4
Original file line numberDiff line numberDiff line change
@@ -820,11 +820,16 @@ func GetTagMapWithNodes() (tagNodesMap map[models.TagID][]models.Node) {
820820
if nodeI.Tags == nil {
821821
continue
822822
}
823-
nodeI.Mutex.RLock()
823+
if nodeI.Mutex != nil {
824+
nodeI.Mutex.RLock()
825+
}
824826
for nodeTagID := range nodeI.Tags {
825827
tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
826828
}
827-
nodeI.Mutex.RUnlock()
829+
if nodeI.Mutex != nil {
830+
nodeI.Mutex.RUnlock()
831+
}
832+
828833
}
829834
return
830835
}
@@ -836,11 +841,15 @@ func GetTagMapWithNodesByNetwork(netID models.NetworkID, withStaticNodes bool) (
836841
if nodeI.Tags == nil {
837842
continue
838843
}
839-
nodeI.Mutex.RLock()
844+
if nodeI.Mutex != nil {
845+
nodeI.Mutex.RLock()
846+
}
840847
for nodeTagID := range nodeI.Tags {
841848
tagNodesMap[nodeTagID] = append(tagNodesMap[nodeTagID], nodeI)
842849
}
843-
nodeI.Mutex.RUnlock()
850+
if nodeI.Mutex != nil {
851+
nodeI.Mutex.RUnlock()
852+
}
844853
}
845854
tagNodesMap["*"] = nodes
846855
if !withStaticNodes {

models/extclient.go

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package models
22

3+
import "sync"
4+
35
// ExtClient - struct for external clients
46
type ExtClient struct {
57
ClientID string `json:"clientid" bson:"clientid"`
@@ -55,5 +57,6 @@ func (ext *ExtClient) ConvertToStaticNode() Node {
5557
Tags: ext.Tags,
5658
IsStatic: true,
5759
StaticNode: *ext,
60+
Mutex: &sync.RWMutex{},
5861
}
5962
}

0 commit comments

Comments
 (0)