5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-26 11:51:37 +00:00

hopefully prevent a deadlock

This commit is contained in:
Arceliar 2019-08-20 18:49:53 -05:00
parent ca73cf9e98
commit 226dd6170d
2 changed files with 13 additions and 2 deletions

View File

@ -69,7 +69,6 @@ func (d *Dialer) DialByNodeIDandMask(nodeID, nodeMask *crypto.NodeID) (*Conn, er
defer t.Stop() defer t.Stop()
select { select {
case <-conn.session.init: case <-conn.session.init:
conn.session.startWorkers()
return conn, nil return conn, nil
case <-t.C: case <-t.C:
conn.Close() conn.Close()

View File

@ -259,6 +259,7 @@ func (ss *sessions) createSession(theirPermKey *crypto.BoxPubKey) *sessionInfo {
<-sinfo.cancel.Finished() <-sinfo.cancel.Finished()
sinfo.core.router.doAdmin(sinfo.close) sinfo.core.router.doAdmin(sinfo.close)
}() }()
go sinfo.startWorkers()
return &sinfo return &sinfo
} }
@ -386,7 +387,6 @@ func (ss *sessions) handlePing(ping *sessionPing) {
for i := range conn.nodeMask { for i := range conn.nodeMask {
conn.nodeMask[i] = 0xFF conn.nodeMask[i] = 0xFF
} }
conn.session.startWorkers()
c := ss.listener.conn c := ss.listener.conn
go func() { c <- conn }() go func() { c <- conn }()
} }
@ -568,6 +568,12 @@ func (sinfo *sessionInfo) recvWorker() {
} }
} }
}() }()
select {
case <-sinfo.cancel.Finished():
return
case <-sinfo.init:
// Wait until the session has finished initializing before processing any packets
}
for { for {
for len(callbacks) > 0 { for len(callbacks) > 0 {
select { select {
@ -634,6 +640,12 @@ func (sinfo *sessionInfo) sendWorker() {
util.WorkerGo(poolFunc) util.WorkerGo(poolFunc)
callbacks = append(callbacks, ch) callbacks = append(callbacks, ch)
} }
select {
case <-sinfo.cancel.Finished():
return
case <-sinfo.init:
// Wait until the session has finished initializing before processing any packets
}
for { for {
for len(callbacks) > 0 { for len(callbacks) > 0 {
select { select {