diff --git a/app/plugins/contactRetry.go b/app/plugins/contactRetry.go index d23f031..4856929 100644 --- a/app/plugins/contactRetry.go +++ b/app/plugins/contactRetry.go @@ -131,6 +131,12 @@ func (cr *contactRetry) retryDisconnected() { } func (cr *contactRetry) handleEvent(id string, state connections.ConnectionState, ctype connectionType) { + + // don't handle contact retries for ourselves + if id == cr.onion { + return + } + if _, exists := cr.connections.Load(id); !exists { p := &contact{id: id, state: state, backoff: 0, ticks: 0, ctype: ctype} cr.connections.Store(id, p) diff --git a/app/plugins/networkCheck.go b/app/plugins/networkCheck.go index 51f4545..9ce1f60 100644 --- a/app/plugins/networkCheck.go +++ b/app/plugins/networkCheck.go @@ -20,8 +20,8 @@ const NetworkCheckSuccess = "Success" type networkCheck struct { bus event.Manager queue event.Queue + onion string acn connectivity.ACN - onionsToCheck sync.Map // onion:string => true:bool breakChan chan bool running bool offline bool @@ -29,8 +29,8 @@ type networkCheck struct { } // NewNetworkCheck returns a Plugin that when started will attempt various network tests -func NewNetworkCheck(bus event.Manager, acn connectivity.ACN) Plugin { - nc := &networkCheck{bus: bus, acn: acn, queue: event.NewQueue(), breakChan: make(chan bool, 1)} +func NewNetworkCheck(onion string, bus event.Manager, acn connectivity.ACN) Plugin { + nc := &networkCheck{onion:onion, bus: bus, acn: acn, queue: event.NewQueue(), breakChan: make(chan bool, 1)} return nc } @@ -61,12 +61,13 @@ func (nc *networkCheck) run() { // and then we will wait a minute and check the connection for the first time (the onion should be up) // under normal operating circumstances case event.ProtocolEngineStartListen: - if _, exists := nc.onionsToCheck.Load(e.Data[event.Onion]); !exists { + if nc.onion == (e.Data[event.Onion]) { log.Debugf("initiating connection check for %v", e.Data[event.Onion]) - nc.onionsToCheck.Store(e.Data[event.Onion], true) if time.Since(lastMessageReceived) > time.Minute { nc.selfTest() } + } else { + log.Errorf("network check plugin received an event for a different profile than it was started with. Internal wiring is probably wrong.") } case event.PeerStateChange: fallthrough @@ -114,10 +115,7 @@ func (nc *networkCheck) Shutdown() { } func (nc *networkCheck) selfTest() { - nc.onionsToCheck.Range(func(key, val interface{}) bool { - go nc.checkConnection(key.(string)) - return true - }) + go nc.checkConnection(nc.onion) } // diff --git a/app/plugins/plugin.go b/app/plugins/plugin.go index be8252b..f5a9915 100644 --- a/app/plugins/plugin.go +++ b/app/plugins/plugin.go @@ -27,7 +27,7 @@ func Get(id PluginID, bus event.Manager, acn connectivity.ACN, onion string) (Pl case CONNECTIONRETRY: return NewConnectionRetry(bus, onion), nil case NETWORKCHECK: - return NewNetworkCheck(bus, acn), nil + return NewNetworkCheck(onion, bus, acn), nil } return nil, fmt.Errorf("plugin not defined %v", id)