From 85afe187ff79eb3dececbffb5075b664aa193408 Mon Sep 17 00:00:00 2001 From: Arceliar Date: Wed, 6 Jun 2018 23:23:16 -0500 Subject: [PATCH] remove peer timeout logic from the switch, so switch peer entrires are only removed when the peer struct is removed --- src/yggdrasil/peer.go | 10 ++++++++-- src/yggdrasil/switch.go | 17 +++-------------- src/yggdrasil/tcp.go | 1 - 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/yggdrasil/peer.go b/src/yggdrasil/peer.go index 47f29f8..15371e3 100644 --- a/src/yggdrasil/peer.go +++ b/src/yggdrasil/peer.go @@ -150,6 +150,9 @@ func (ps *peers) removePeer(port switchPort) { if port == 0 { return } // Can't remove self peer + ps.core.router.doAdmin(func() { + ps.core.switchTable.removePeer(port) + }) ps.mutex.Lock() oldPorts := ps.getPorts() p, isIn := oldPorts[port] @@ -160,8 +163,11 @@ func (ps *peers) removePeer(port switchPort) { delete(newPorts, port) ps.putPorts(newPorts) ps.mutex.Unlock() - if isIn && p.close != nil { - p.close() + if isIn { + if p.close != nil { + p.close() + } + close(p.linkIn) } } diff --git a/src/yggdrasil/switch.go b/src/yggdrasil/switch.go index 03921de..d765f59 100644 --- a/src/yggdrasil/switch.go +++ b/src/yggdrasil/switch.go @@ -181,7 +181,6 @@ func (t *switchTable) doMaintenance() { t.mutex.Lock() // Write lock defer t.mutex.Unlock() // Release lock when we're done t.cleanRoot() - t.cleanPeers() t.cleanDropped() } @@ -227,19 +226,9 @@ func (t *switchTable) cleanRoot() { } } -func (t *switchTable) cleanPeers() { - now := time.Now() - changed := false - for idx, info := range t.data.peers { - if info.port != switchPort(0) && now.Sub(info.time) > 6*time.Second /*switch_timeout*/ { - //fmt.Println("peer timed out", t.key, info.locator) - delete(t.data.peers, idx) - changed = true - } - } - if changed { - t.updater.Store(&sync.Once{}) - } +func (t *switchTable) removePeer(port switchPort) { + delete(t.data.peers, port) + t.updater.Store(&sync.Once{}) } func (t *switchTable) cleanDropped() { diff --git a/src/yggdrasil/tcp.go b/src/yggdrasil/tcp.go index e21522b..75be31b 100644 --- a/src/yggdrasil/tcp.go +++ b/src/yggdrasil/tcp.go @@ -279,7 +279,6 @@ func (iface *tcpInterface) handler(sock net.Conn, incoming bool) { defer func() { // Put all of our cleanup here... p.core.peers.removePeer(p.port) - close(p.linkIn) }() them, _, _ := net.SplitHostPort(sock.RemoteAddr().String()) themNodeID := getNodeID(&info.box)