Skip to content

Commit b1b68bc

Browse files
committed
Fix server shutdown race condition and improve error handling
- Make exit channel buffered to prevent goroutine blocking - Filter out http.ErrServerClosed from error reporting during graceful shutdown - Add wg.Wait() to ensure both servers complete shutdown before returning
1 parent 4a56047 commit b1b68bc

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

pkg/mcp-proxy/main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func Run(
153153
},
154154
}
155155

156-
exit := make(chan struct{})
156+
exit := make(chan struct{}, 2)
157157
var wg sync.WaitGroup
158158

159159
httpServer := &http.Server{
@@ -179,7 +179,7 @@ func Run(
179179
go func() {
180180
defer wg.Done()
181181
err := httpServer.ListenAndServe()
182-
if err != nil {
182+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
183183
lock.Lock()
184184
errs = append(errs, err)
185185
lock.Unlock()
@@ -190,7 +190,7 @@ func Run(
190190
go func() {
191191
defer wg.Done()
192192
err := httpsServer.ListenAndServeTLS("", "")
193-
if err != nil {
193+
if err != nil && !errors.Is(err, http.ErrServerClosed) {
194194
lock.Lock()
195195
errs = append(errs, err)
196196
lock.Unlock()
@@ -208,6 +208,7 @@ func Run(
208208
if shutdownErr := httpsServer.Shutdown(shutdownCtx); shutdownErr != nil {
209209
logger.Warn("HTTPS server shutdown error", zap.Error(shutdownErr))
210210
}
211+
wg.Wait()
211212
return errors.Join(errs...)
212213
} else {
213214
logger.Info("Starting server", zap.String("listen", listen))

0 commit comments

Comments
 (0)