From 78aed5beed0e8758a17b589a7fd0c96f50e4a6dd Mon Sep 17 00:00:00 2001 From: Milos Gajdos Date: Wed, 8 Jan 2020 14:48:38 +0000 Subject: [PATCH] Fixed tunnel race conditions. (#1094) --- tunnel/default.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tunnel/default.go b/tunnel/default.go index 89de3dfb..cc8e78be 100644 --- a/tunnel/default.go +++ b/tunnel/default.go @@ -201,15 +201,15 @@ func (t *tun) announce(channel, session string, link *link) { } // manage monitors outbound links and attempts to reconnect to the failed ones -func (t *tun) manage() { - reconnect := time.NewTicker(ReconnectTime) - defer reconnect.Stop() +func (t *tun) manage(reconnect time.Duration) { + r := time.NewTicker(reconnect) + defer r.Stop() for { select { case <-t.closed: return - case <-reconnect.C: + case <-r.C: t.manageLinks() } } @@ -862,8 +862,11 @@ func (t *tun) setupLink(node string) (*link, error) { // create a new link link := newLink(c) + // set link id to remote side + link.Lock() link.id = c.Remote() + link.Unlock() // send the first connect message if err := t.sendMsg("connect", link); err != nil { @@ -984,7 +987,7 @@ func (t *tun) Connect() error { t.setupLinks() // manage the links - go t.manage() + go t.manage(ReconnectTime) return nil }