Skip to content

Commit b68f85d

Browse files
authored
Fix vMCP server graceful shutdown (#2472)
Resolves shutdown hang and "use of closed network connection" errors by: removing redundant listener.Close() call since httpServer.Shutdown() already handles listener cleanup internally. Previously you would have seen: ``` 5:21PM ERROR Errors during shutdown: [failed to close listener: close tcp 127.0.0.1:4483: use of closed network connection] Error: failed to close listener: close tcp 127.0.0.1:4483: use of closed network connection 5:21PM ERROR Error executing command: failed to close listener: close tcp 127.0.0.1:4483: use of closed network connection ```
1 parent 3c16148 commit b68f85d

File tree

1 file changed

+3
-10
lines changed

1 file changed

+3
-10
lines changed

pkg/vmcp/server/server.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ func (s *Server) Stop(ctx context.Context) error {
309309

310310
var errs []error
311311

312-
// Stop HTTP server
312+
// Stop HTTP server (this internally closes the listener)
313313
if s.httpServer != nil {
314314
// Create shutdown context with timeout
315315
shutdownCtx, cancel := context.WithTimeout(ctx, defaultShutdownTimeout)
@@ -320,19 +320,12 @@ func (s *Server) Stop(ctx context.Context) error {
320320
}
321321
}
322322

323-
// Close listener
323+
// Clear listener reference (already closed by httpServer.Shutdown)
324324
s.listenerMu.Lock()
325-
listener := s.listener
326325
s.listener = nil
327326
s.listenerMu.Unlock()
328327

329-
if listener != nil {
330-
if err := listener.Close(); err != nil {
331-
errs = append(errs, fmt.Errorf("failed to close listener: %w", err))
332-
}
333-
}
334-
335-
// Stop session manager
328+
// Stop session manager after HTTP server shutdown
336329
if s.sessionManager != nil {
337330
if err := s.sessionManager.Stop(); err != nil {
338331
errs = append(errs, fmt.Errorf("failed to stop session manager: %w", err))

0 commit comments

Comments
 (0)