Merge pull request #514 from Arceliar/bugfix

hopefully prevent a deadlock
This commit is contained in:
Arceliar 2019-08-20 19:13:00 -05:00 committed by GitHub
commit f9d28e80df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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()
select {
case <-conn.session.init:
conn.session.startWorkers()
return conn, nil
case <-t.C:
conn.Close()

View File

@ -259,6 +259,7 @@ func (ss *sessions) createSession(theirPermKey *crypto.BoxPubKey) *sessionInfo {
<-sinfo.cancel.Finished()
sinfo.core.router.doAdmin(sinfo.close)
}()
go sinfo.startWorkers()
return &sinfo
}
@ -386,7 +387,6 @@ func (ss *sessions) handlePing(ping *sessionPing) {
for i := range conn.nodeMask {
conn.nodeMask[i] = 0xFF
}
conn.session.startWorkers()
c := ss.listener.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 len(callbacks) > 0 {
select {
@ -634,6 +640,12 @@ func (sinfo *sessionInfo) sendWorker() {
util.WorkerGo(poolFunc)
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 len(callbacks) > 0 {
select {