mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2024-11-27 12:05:23 +00:00
fix channel multiple close bug and concurrency bug in the way sessionInfo.close was being called
This commit is contained in:
parent
43bcb9e154
commit
7d58a7ef3e
@ -256,7 +256,7 @@ func (c *Conn) Close() error {
|
|||||||
defer c.mutex.Unlock()
|
defer c.mutex.Unlock()
|
||||||
if c.session != nil {
|
if c.session != nil {
|
||||||
// Close the session, if it hasn't been closed already
|
// Close the session, if it hasn't been closed already
|
||||||
c.session.close()
|
c.core.router.doAdmin(c.session.close)
|
||||||
}
|
}
|
||||||
// This can't fail yet - TODO?
|
// This can't fail yet - TODO?
|
||||||
c.closed = true
|
c.closed = true
|
||||||
|
@ -269,8 +269,11 @@ func (ss *sessions) cleanup() {
|
|||||||
|
|
||||||
// Closes a session, removing it from sessions maps and killing the worker goroutine.
|
// Closes a session, removing it from sessions maps and killing the worker goroutine.
|
||||||
func (sinfo *sessionInfo) close() {
|
func (sinfo *sessionInfo) close() {
|
||||||
delete(sinfo.core.sessions.sinfos, sinfo.myHandle)
|
if s := sinfo.core.sessions.sinfos[sinfo.myHandle]; s == sinfo {
|
||||||
delete(sinfo.core.sessions.byTheirPerm, sinfo.theirPermPub)
|
delete(sinfo.core.sessions.sinfos, sinfo.myHandle)
|
||||||
|
delete(sinfo.core.sessions.byTheirPerm, sinfo.theirPermPub)
|
||||||
|
}
|
||||||
|
defer func() { recover() }()
|
||||||
close(sinfo.worker)
|
close(sinfo.worker)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user