diff --git a/plugins/analysis/client/plugin.go b/plugins/analysis/client/plugin.go index c3d4abcf4c3bfe886936fe4a9db3f09723c3f88d..cbc41e18ece40c11ffe556056f623c06548048dc 100644 --- a/plugins/analysis/client/plugin.go +++ b/plugins/analysis/client/plugin.go @@ -3,6 +3,7 @@ package client import ( "encoding/hex" "net" + "sync" "time" "github.com/iotaledger/goshimmer/packages/autopeering/discover" @@ -25,6 +26,7 @@ import ( ) var log *logger.Logger +var connLock sync.Mutex func Run(plugin *node.Plugin) { log = logger.NewLogger("Analysis-Client") @@ -59,19 +61,27 @@ func getEventDispatchers(conn *network.ManagedConnection) *EventDispatchers { return &EventDispatchers{ AddNode: func(nodeId []byte) { log.Debugw("AddNode", "nodeId", hex.EncodeToString(nodeId)) + connLock.Lock() _, _ = conn.Write((&addnode.Packet{NodeId: nodeId}).Marshal()) + connLock.Unlock() }, RemoveNode: func(nodeId []byte) { log.Debugw("RemoveNode", "nodeId", hex.EncodeToString(nodeId)) + connLock.Lock() _, _ = conn.Write((&removenode.Packet{NodeId: nodeId}).Marshal()) + connLock.Unlock() }, ConnectNodes: func(sourceId []byte, targetId []byte) { log.Debugw("ConnectNodes", "sourceId", hex.EncodeToString(sourceId), "targetId", hex.EncodeToString(targetId)) + connLock.Lock() _, _ = conn.Write((&connectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal()) + connLock.Unlock() }, DisconnectNodes: func(sourceId []byte, targetId []byte) { log.Debugw("DisconnectNodes", "sourceId", hex.EncodeToString(sourceId), "targetId", hex.EncodeToString(targetId)) + connLock.Lock() _, _ = conn.Write((&disconnectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal()) + connLock.Unlock() }, } } @@ -172,9 +182,12 @@ func keepConnectionAlive(conn *network.ManagedConnection, shutdownSignal <-chan return true case <-ticker.C: + connLock.Lock() if _, err := conn.Write((&ping.Packet{}).Marshal()); err != nil { + connLock.Unlock() return false } + connLock.Unlock() } } } diff --git a/plugins/analysis/webinterface/recordedevents/recorded_events.go b/plugins/analysis/webinterface/recordedevents/recorded_events.go index 398ca97082bbbd35db53d22f38ec76eeb1a1ad2b..80ff952f0f1c9749e364224a68913033d293b9b0 100644 --- a/plugins/analysis/webinterface/recordedevents/recorded_events.go +++ b/plugins/analysis/webinterface/recordedevents/recorded_events.go @@ -84,7 +84,8 @@ func Replay(handlers *types.EventHandlers) { handlers.NodeOffline(nodeId) } } - + lock.Lock() + defer lock.Unlock() for sourceId, targetMap := range links { for targetId := range targetMap { handlers.ConnectNodes(sourceId, targetId)