Fix multiple calls to disconnect

This commit is contained in:
Louis
2018-06-14 17:13:05 -07:00
parent 86dee2780c
commit a57fe8cf1e

View File

@@ -197,24 +197,25 @@ func (n *Neighbor) Connect() error {
func (n *Neighbor) Disconnect() { func (n *Neighbor) Disconnect() {
log.Infof("%v: Disconnected", n.String()) log.Infof("%v: Disconnected", n.String())
wasConnected := n.Connected
n.Connected = false n.Connected = false
n.State.OpenReceived = false n.State.OpenReceived = false
n.tcpconn.Close() n.tcpconn.Close()
n.UpdateState(STATE_IDLE) n.UpdateState(STATE_IDLE)
if n.HandlerEvent != nil { if n.HandlerEvent != nil && wasConnected == true {
n.HandlerEvent.DisconnectedNeighbor(n) n.HandlerEvent.DisconnectedNeighbor(n)
} }
if n.RemoveOnDisconnect && n.s != nil && n.s.Manager != nil { if n.RemoveOnDisconnect && n.s != nil && n.s.Manager != nil {
log.Infof("%v: Removing from manager", n.String()) log.Infof("%v: Removing from manager", n.String())
select { select {
case n.qLife <- true: case n.qLife <- true:
default: default:
} }
select { select {
case n.qSender <- true: case n.qSender <- true:
default: default:
} }
n.s.Manager.RemoveNeighbor(n) n.s.Manager.RemoveNeighbor(n)