4
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2025-07-11 02:36:28 +00:00

fix channel multiple close bug and concurrency bug in the way sessionInfo.close was being called

This commit is contained in:
Arceliar
2019-06-29 17:44:28 -05:00
parent 43bcb9e154
commit 7d58a7ef3e
2 changed files with 6 additions and 3 deletions

View File

@ -269,8 +269,11 @@ func (ss *sessions) cleanup() {
// Closes a session, removing it from sessions maps and killing the worker goroutine.
func (sinfo *sessionInfo) close() {
delete(sinfo.core.sessions.sinfos, sinfo.myHandle)
delete(sinfo.core.sessions.byTheirPerm, sinfo.theirPermPub)
if s := sinfo.core.sessions.sinfos[sinfo.myHandle]; s == sinfo {
delete(sinfo.core.sessions.sinfos, sinfo.myHandle)
delete(sinfo.core.sessions.byTheirPerm, sinfo.theirPermPub)
}
defer func() { recover() }()
close(sinfo.worker)
}