aboutsummaryrefslogtreecommitdiff
path: root/forged/internal/server
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-08-17 04:14:35 +0800
committerRunxi Yu <me@runxiyu.org>2025-08-17 04:14:35 +0800
commit50c47def81ab75fbc087e7fd1845aff134dae6e6 (patch)
treed84e1a23accf7aa4aacb434efe7d2c39120da35d /forged/internal/server
parentContext fixes (diff)
downloadforge-50c47def81ab75fbc087e7fd1845aff134dae6e6.tar.gz
forge-50c47def81ab75fbc087e7fd1845aff134dae6e6.tar.zst
forge-50c47def81ab75fbc087e7fd1845aff134dae6e6.zip
Fix potential goroutine leak from multi-serverpart errors
Diffstat (limited to 'forged/internal/server')
-rw-r--r--forged/internal/server/server.go32
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 {