fix(startup): recover from panics in deferred background init
The deferred background-init steps run in a detached goroutine after the HTTP listener is already accepting connections. An unrecovered panic in any step (queue seeding, legacy cleanup, scrobble sweep) would crash the entire live server. Wrap each step in a recover that logs the panic with a stack and continues to the next step. Found during PR #21 review. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+10
-1
@@ -15,6 +15,7 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"runtime/debug"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
@@ -1677,7 +1678,15 @@ func main() {
|
||||
if appCtx.Err() != nil {
|
||||
return
|
||||
}
|
||||
step(appCtx)
|
||||
func() {
|
||||
defer func() {
|
||||
if p := recover(); p != nil {
|
||||
slog.Error("deferred startup init step panicked; continuing",
|
||||
"panic", p, "stack", string(debug.Stack()))
|
||||
}
|
||||
}()
|
||||
step(appCtx)
|
||||
}()
|
||||
}
|
||||
slog.Info("deferred startup init completed", "steps", len(backgroundInit), "duration", time.Since(start))
|
||||
}()
|
||||
|
||||
Reference in New Issue
Block a user