diff --git a/run/main.go b/run/main.go index 903519e..9050df5 100644 --- a/run/main.go +++ b/run/main.go @@ -4,6 +4,7 @@ import ( "bufio" "flag" "fmt" + "io" "os" "os/signal" "runtime/pprof" @@ -36,6 +37,10 @@ func Run() int { return 0 } + if printStackOnExit { + printStackTo(os.Stdout) + } + _ = modules.Shutdown() return modules.GetExitStatusCode() } @@ -78,20 +83,13 @@ signalLoop: }() if printStackOnExit { - fmt.Println("=== PRINTING TRACES ===") - fmt.Println("=== GOROUTINES ===") - _ = pprof.Lookup("goroutine").WriteTo(os.Stdout, 1) - fmt.Println("=== BLOCKING ===") - _ = pprof.Lookup("block").WriteTo(os.Stdout, 1) - fmt.Println("=== MUTEXES ===") - _ = pprof.Lookup("mutex").WriteTo(os.Stdout, 1) - fmt.Println("=== END TRACES ===") + printStackTo(os.Stdout) } go func() { - time.Sleep(60 * time.Second) - fmt.Fprintln(os.Stderr, "===== TAKING TOO LONG FOR SHUTDOWN - PRINTING STACK TRACES =====") - _ = pprof.Lookup("goroutine").WriteTo(os.Stderr, 1) + time.Sleep(3 * time.Minute) + fmt.Fprintln(os.Stderr, "===== TAKING TOO LONG FOR SHUTDOWN =====") + printStackTo(os.Stderr) os.Exit(1) }() @@ -124,3 +122,14 @@ func inputSignals(signalCh chan os.Signal) { } } } + +func printStackTo(writer io.Writer) { + fmt.Fprintln(writer, "=== PRINTING TRACES ===") + fmt.Fprintln(writer, "=== GOROUTINES ===") + _ = pprof.Lookup("goroutine").WriteTo(writer, 1) + fmt.Fprintln(writer, "=== BLOCKING ===") + _ = pprof.Lookup("block").WriteTo(writer, 1) + fmt.Fprintln(writer, "=== MUTEXES ===") + _ = pprof.Lookup("mutex").WriteTo(writer, 1) + fmt.Fprintln(writer, "=== END TRACES ===") +}