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
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()
}
}
}
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment