Skip to content

Commit 529506d

Browse files
authored
Merge pull request #570 from cybertec-postgresql/569-unhide-panics
[-] make sure panics output won't be hidden, fixes #569
2 parents 66372b6 + 23590cb commit 529506d

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

main.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"os"
77
"os/signal"
8+
"runtime/debug"
89
"syscall"
910

1011
"github.com/cybertec-postgresql/pg_timetable/internal/api"
@@ -43,6 +44,7 @@ const (
4344
ExitCodeUpgradeError
4445
ExitCodeUserCancel
4546
ExitCodeShutdownCommand
47+
ExitCodeFatalError
4648
)
4749

4850
var exitCode = ExitCodeOK
@@ -65,12 +67,6 @@ func printVersion() {
6567
}
6668

6769
func main() {
68-
defer func() { os.Exit(exitCode) }()
69-
70-
ctx, cancel := context.WithCancel(context.Background())
71-
SetupCloseHandler(cancel)
72-
defer cancel()
73-
7470
cmdOpts, err := config.NewConfig(os.Stdout)
7571
if err != nil {
7672
if cmdOpts != nil && cmdOpts.VersionOnly() {
@@ -81,12 +77,22 @@ func main() {
8177
exitCode = ExitCodeConfigError
8278
return
8379
}
84-
8580
if cmdOpts.Version {
8681
printVersion()
8782
}
8883

8984
logger := log.Init(cmdOpts.Logging)
85+
ctx, cancel := context.WithCancel(context.Background())
86+
SetupCloseHandler(cancel)
87+
defer func() {
88+
cancel()
89+
if err := recover(); err != nil {
90+
exitCode = ExitCodeFatalError
91+
logger.WithField("callstack", string(debug.Stack())).Error(err)
92+
}
93+
os.Exit(exitCode)
94+
}()
95+
9096
apiserver := api.Init(cmdOpts.RESTApi, logger)
9197

9298
if pge, err = pgengine.New(ctx, *cmdOpts, logger); err != nil {

0 commit comments

Comments
 (0)