Separate lookup nodes and setup nodes

This commit is contained in:
Asim Aslam 2019-09-02 12:05:47 +01:00
parent 956be5c59d
commit 2cdfed359f

View File

@ -132,17 +132,28 @@ func (t *tun) monitor() {
case <-t.closed: case <-t.closed:
return return
case <-reconnect.C: case <-reconnect.C:
var connect []string
// build list of unknown nodes to connect to
t.RLock()
for _, node := range t.options.Nodes { for _, node := range t.options.Nodes {
t.Lock()
if _, ok := t.links[node]; !ok { if _, ok := t.links[node]; !ok {
link, err := t.setupLink(node) connect = append(connect, node)
if err != nil {
log.Debugf("Tunnel failed to setup node link to %s: %v", node, err)
t.Unlock()
continue
}
t.links[node] = link
} }
}
t.RUnlock()
for _, node := range connect {
// create new link
link, err := t.setupLink(node)
if err != nil {
log.Debugf("Tunnel failed to setup node link to %s: %v", node, err)
continue
}
// save the link
t.Lock()
t.links[node] = link
t.Unlock() t.Unlock()
} }
} }