mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-16 07:16:38 +00:00
[client] Fix SSH server Stop() deadlock when sessions are active (#5717)
This commit is contained in:
@@ -284,19 +284,21 @@ func (s *Server) closeListener(ln net.Listener) {
|
|||||||
// Stop closes the SSH server
|
// Stop closes the SSH server
|
||||||
func (s *Server) Stop() error {
|
func (s *Server) Stop() error {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
sshServer := s.sshServer
|
||||||
|
if sshServer == nil {
|
||||||
if s.sshServer == nil {
|
s.mu.Unlock()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
s.sshServer = nil
|
||||||
|
s.listener = nil
|
||||||
|
s.mu.Unlock()
|
||||||
|
|
||||||
if err := s.sshServer.Close(); err != nil {
|
// Close outside the lock: session handlers need s.mu for unregisterSession.
|
||||||
|
if err := sshServer.Close(); err != nil {
|
||||||
log.Debugf("close SSH server: %v", err)
|
log.Debugf("close SSH server: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.sshServer = nil
|
s.mu.Lock()
|
||||||
s.listener = nil
|
|
||||||
|
|
||||||
maps.Clear(s.sessions)
|
maps.Clear(s.sessions)
|
||||||
maps.Clear(s.pendingAuthJWT)
|
maps.Clear(s.pendingAuthJWT)
|
||||||
maps.Clear(s.connections)
|
maps.Clear(s.connections)
|
||||||
@@ -307,6 +309,7 @@ func (s *Server) Stop() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
maps.Clear(s.remoteForwardListeners)
|
maps.Clear(s.remoteForwardListeners)
|
||||||
|
s.mu.Unlock()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user