mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03: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
					
				
					 2 changed files with 6 additions and 3 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue