diff --git a/client/vnc/server/server.go b/client/vnc/server/server.go index d14584625..3ed69d909 100644 --- a/client/vnc/server/server.go +++ b/client/vnc/server/server.go @@ -682,8 +682,14 @@ func (s *Server) Stop() error { // acceptLoop handles VNC connections directly (user session mode). func (s *Server) acceptLoop() { + s.mu.Lock() + ln := s.listener + s.mu.Unlock() + if ln == nil { + return + } for { - conn, err := s.listener.Accept() + conn, err := ln.Accept() if err != nil { select { case <-s.ctx.Done(): diff --git a/client/vnc/server/server_darwin.go b/client/vnc/server/server_darwin.go index 18b5bbb7b..593de3e79 100644 --- a/client/vnc/server/server_darwin.go +++ b/client/vnc/server/server_darwin.go @@ -30,8 +30,14 @@ func (s *Server) serviceAcceptLoop() { log.Info("service mode, proxying connections to per-user agent over Unix socket") + s.mu.Lock() + ln := s.listener + s.mu.Unlock() + if ln == nil { + return + } for { - conn, err := s.listener.Accept() + conn, err := ln.Accept() if err != nil { select { case <-s.ctx.Done(): diff --git a/client/vnc/server/server_windows.go b/client/vnc/server/server_windows.go index 0d13dc045..88ebf74f8 100644 --- a/client/vnc/server/server_windows.go +++ b/client/vnc/server/server_windows.go @@ -248,8 +248,15 @@ func (s *Server) serviceAcceptLoop() { log.Info("service mode, proxying connections to agent over Unix socket") + s.mu.Lock() + ln := s.listener + s.mu.Unlock() + if ln == nil { + sm.Stop() + return + } for { - conn, err := s.listener.Accept() + conn, err := ln.Accept() if err != nil { select { case <-s.ctx.Done():