Skip to content
Snippets Groups Projects
Commit 6e82f204 authored by Angelo Capossele's avatar Angelo Capossele Committed by Luca Moser
Browse files

:bug: fixes race conditions (#178)

parent eda46463
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ package client ...@@ -3,6 +3,7 @@ package client
import ( import (
"encoding/hex" "encoding/hex"
"net" "net"
"sync"
"time" "time"
"github.com/iotaledger/goshimmer/packages/autopeering/discover" "github.com/iotaledger/goshimmer/packages/autopeering/discover"
...@@ -25,6 +26,7 @@ import ( ...@@ -25,6 +26,7 @@ import (
) )
var log *logger.Logger var log *logger.Logger
var connLock sync.Mutex
func Run(plugin *node.Plugin) { func Run(plugin *node.Plugin) {
log = logger.NewLogger("Analysis-Client") log = logger.NewLogger("Analysis-Client")
...@@ -59,19 +61,27 @@ func getEventDispatchers(conn *network.ManagedConnection) *EventDispatchers { ...@@ -59,19 +61,27 @@ func getEventDispatchers(conn *network.ManagedConnection) *EventDispatchers {
return &EventDispatchers{ return &EventDispatchers{
AddNode: func(nodeId []byte) { AddNode: func(nodeId []byte) {
log.Debugw("AddNode", "nodeId", hex.EncodeToString(nodeId)) log.Debugw("AddNode", "nodeId", hex.EncodeToString(nodeId))
connLock.Lock()
_, _ = conn.Write((&addnode.Packet{NodeId: nodeId}).Marshal()) _, _ = conn.Write((&addnode.Packet{NodeId: nodeId}).Marshal())
connLock.Unlock()
}, },
RemoveNode: func(nodeId []byte) { RemoveNode: func(nodeId []byte) {
log.Debugw("RemoveNode", "nodeId", hex.EncodeToString(nodeId)) log.Debugw("RemoveNode", "nodeId", hex.EncodeToString(nodeId))
connLock.Lock()
_, _ = conn.Write((&removenode.Packet{NodeId: nodeId}).Marshal()) _, _ = conn.Write((&removenode.Packet{NodeId: nodeId}).Marshal())
connLock.Unlock()
}, },
ConnectNodes: func(sourceId []byte, targetId []byte) { ConnectNodes: func(sourceId []byte, targetId []byte) {
log.Debugw("ConnectNodes", "sourceId", hex.EncodeToString(sourceId), "targetId", hex.EncodeToString(targetId)) log.Debugw("ConnectNodes", "sourceId", hex.EncodeToString(sourceId), "targetId", hex.EncodeToString(targetId))
connLock.Lock()
_, _ = conn.Write((&connectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal()) _, _ = conn.Write((&connectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal())
connLock.Unlock()
}, },
DisconnectNodes: func(sourceId []byte, targetId []byte) { DisconnectNodes: func(sourceId []byte, targetId []byte) {
log.Debugw("DisconnectNodes", "sourceId", hex.EncodeToString(sourceId), "targetId", hex.EncodeToString(targetId)) log.Debugw("DisconnectNodes", "sourceId", hex.EncodeToString(sourceId), "targetId", hex.EncodeToString(targetId))
connLock.Lock()
_, _ = conn.Write((&disconnectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal()) _, _ = conn.Write((&disconnectnodes.Packet{SourceId: sourceId, TargetId: targetId}).Marshal())
connLock.Unlock()
}, },
} }
} }
...@@ -172,9 +182,12 @@ func keepConnectionAlive(conn *network.ManagedConnection, shutdownSignal <-chan ...@@ -172,9 +182,12 @@ func keepConnectionAlive(conn *network.ManagedConnection, shutdownSignal <-chan
return true return true
case <-ticker.C: case <-ticker.C:
connLock.Lock()
if _, err := conn.Write((&ping.Packet{}).Marshal()); err != nil { if _, err := conn.Write((&ping.Packet{}).Marshal()); err != nil {
connLock.Unlock()
return false return false
} }
connLock.Unlock()
} }
} }
} }
...@@ -84,7 +84,8 @@ func Replay(handlers *types.EventHandlers) { ...@@ -84,7 +84,8 @@ func Replay(handlers *types.EventHandlers) {
handlers.NodeOffline(nodeId) handlers.NodeOffline(nodeId)
} }
} }
lock.Lock()
defer lock.Unlock()
for sourceId, targetMap := range links { for sourceId, targetMap := range links {
for targetId := range targetMap { for targetId := range targetMap {
handlers.ConnectNodes(sourceId, targetId) handlers.ConnectNodes(sourceId, targetId)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment