From b992358fd69ad12fc9d7917d68a0d814ab125466 Mon Sep 17 00:00:00 2001 From: Saxon Milton Date: Sun, 7 Apr 2024 11:48:15 +0000 Subject: [PATCH] Recover control request panics When running a go service, especially as a background systemd service, it's not obvious when there is a panic in a handler, so we're now recovering any panics on our level and logging. Approved-by: Alan Noble --- cmd/vidforward/main.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmd/vidforward/main.go b/cmd/vidforward/main.go index 5a5732d2..94bafc41 100644 --- a/cmd/vidforward/main.go +++ b/cmd/vidforward/main.go @@ -41,6 +41,7 @@ import ( "strings" "sync" "time" + "runtime/debug" "bitbucket.org/ausocean/av/cmd/vidforward/global" "bitbucket.org/ausocean/av/container/mts" @@ -290,7 +291,12 @@ func (m *broadcastManager) recv(w http.ResponseWriter, r *http.Request) { // control handles control API requests. func (m *broadcastManager) control(w http.ResponseWriter, r *http.Request) { done := m.dogNotifier.handlerInvoked("control") - defer done() + defer func(){ + if r := recover(); r != nil { + m.log.Error("panicked in control request!","error",r.(error).Error(),"stack",string(debug.Stack())) + } + done() + }() m.log.Info("control request", "method", r.Method) switch r.Method {