Fix multiple calls to disconnect
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user