From 50c47def81ab75fbc087e7fd1845aff134dae6e6 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 17 Aug 2025 04:14:35 +0800 Subject: [PATCH] Fix potential goroutine leak from multi-serverpart errors --- forged/internal/server/server.go | 32 ++++++++++++++++++++++++++++---- diff --git a/forged/internal/server/server.go b/forged/internal/server/server.go index 0b14e62bf28951cef4f6f23985dddd2dae8c5723..867e54fc269551f4b2fe3894c28fb9d52095e91b 100644 --- a/forged/internal/server/server.go +++ b/forged/internal/server/server.go @@ -63,22 +63,46 @@ errCh := make(chan error) go func() { err := server.hookServer.Run(subCtx) - errCh <- err + if err == nil { + panic("hook server should never return nil error") + } + select { + case errCh <- err: + default: + } }() go func() { err := server.lmtpServer.Run(subCtx) - errCh <- err + if err == nil { + panic("lmtp server should never return nil error") + } + select { + case errCh <- err: + default: + } }() go func() { err := server.webServer.Run(subCtx) - errCh <- err + if err == nil { + panic("web server should never return nil error") + } + select { + case errCh <- err: + default: + } }() go func() { err := server.sshServer.Run(subCtx) - errCh <- err + if err == nil { + panic("ssh server should never return nil error") + } + select { + case errCh <- err: + default: + } }() select { -- 2.48.1