From d4b719a5c5cff829b9b92ef78e0a896a4cf0b964 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 19 Aug 2019 12:19:11 +0200 Subject: manager: print panics on all go routines not just main one Signed-off-by: Jason A. Donenfeld --- manager/service.go | 23 +++++++++++++---------- manager/updatestate.go | 2 ++ 2 files changed, 15 insertions(+), 10 deletions(-) (limited to 'manager') diff --git a/manager/service.go b/manager/service.go index 30567811..44b5456e 100644 --- a/manager/service.go +++ b/manager/service.go @@ -30,6 +30,17 @@ import ( type managerService struct{} +func printPanic() { + if x := recover(); x != nil { + for _, line := range append([]string{fmt.Sprint(x)}, strings.Split(string(debug.Stack()), "\n")...) { + if len(strings.TrimSpace(line)) > 0 { + log.Println(line) + } + } + panic(x) + } +} + func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (svcSpecificEC bool, exitCode uint32) { changes <- svc.Status{State: svc.StartPending} @@ -50,16 +61,7 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest serviceError = services.ErrorRingloggerOpen return } - defer func() { - if x := recover(); x != nil { - for _, line := range append([]string{fmt.Sprint(x)}, strings.Split(string(debug.Stack()), "\n")...) { - if len(strings.TrimSpace(line)) > 0 { - log.Println(line) - } - } - panic(x) - } - }() + defer printPanic() log.Println("Starting", version.UserAgent()) @@ -239,6 +241,7 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest goStartProcess := func(session uint32) { procsGroup.Add(1) go func() { + defer printPanic() startProcess(session) procsGroup.Done() }() diff --git a/manager/updatestate.go b/manager/updatestate.go index 4b2cf1c1..b54cc367 100644 --- a/manager/updatestate.go +++ b/manager/updatestate.go @@ -24,6 +24,8 @@ const ( var updateState = UpdateStateUnknown func checkForUpdates() { + defer printPanic() + if !version.IsRunningOfficialVersion() { log.Println("Build is not official, so updates are disabled") updateState = UpdateStateUpdatesDisabledUnofficialBuild -- cgit v1.2.3-59-g8ed1b