diff options
author | Runxi Yu <me@runxiyu.org> | 2025-08-17 04:14:35 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-08-17 04:14:35 +0800 |
commit | 50c47def81ab75fbc087e7fd1845aff134dae6e6 (patch) | |
tree | d84e1a23accf7aa4aacb434efe7d2c39120da35d /forged/internal | |
parent | Context fixes (diff) | |
download | forge-50c47def81ab75fbc087e7fd1845aff134dae6e6.tar.gz forge-50c47def81ab75fbc087e7fd1845aff134dae6e6.tar.zst forge-50c47def81ab75fbc087e7fd1845aff134dae6e6.zip |
Fix potential goroutine leak from multi-serverpart errors
Diffstat (limited to 'forged/internal')
-rw-r--r-- | forged/internal/server/server.go | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/forged/internal/server/server.go b/forged/internal/server/server.go index 0b14e62..867e54f 100644 --- a/forged/internal/server/server.go +++ b/forged/internal/server/server.go @@ -63,22 +63,46 @@ func (server *Server) Run(ctx context.Context) (err 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 { |