Share one VNC session agent manager across all accept loops

This commit is contained in:
Viktor Liu
2026-07-30 14:29:34 +02:00
parent c88950e9c5
commit 34669a0be8
6 changed files with 98 additions and 17 deletions
+13 -3
View File
@@ -246,8 +246,11 @@ func (s *Server) serviceAcceptLoop(ln net.Listener) {
return
}
sm := newSessionManager()
go sm.run()
sm := s.serviceAgent()
if sm == nil {
s.log.Error("service mode: no agent manager available")
return
}
log.Info("service mode, proxying connections to agent over Unix socket")
@@ -256,7 +259,6 @@ func (s *Server) serviceAcceptLoop(ln net.Listener) {
if err != nil {
select {
case <-s.ctx.Done():
sm.Stop()
return
default:
}
@@ -279,3 +281,11 @@ func (s *Server) serviceAcceptLoop(ln net.Listener) {
}(conn)
}
}
// newServiceAgentManager starts the session manager that owns the console
// agent. Called once per server via Server.serviceAgent.
func (s *Server) newServiceAgentManager() (sessionAgent, func()) {
sm := newSessionManager()
go sm.run()
return sm, sm.Stop
}