From 86d82c1098cc45941ba7fac2cbf32a8fc7acb171 Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Thu, 7 Nov 2024 20:05:17 +0000 Subject: [PATCH] chore(main): let system handle OS signals after first one to stop program --- cmd/gluetun/main.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/cmd/gluetun/main.go b/cmd/gluetun/main.go index d7a99366..8574f97e 100644 --- a/cmd/gluetun/main.go +++ b/cmd/gluetun/main.go @@ -98,11 +98,13 @@ func main() { errorCh <- _main(ctx, buildInfo, args, logger, reader, tun, netLinker, cmder, cli) }() + // Wait for OS signal or run error var err error select { - case signal := <-signalCh: + case receivedSignal := <-signalCh: + signal.Stop(signalCh) fmt.Println("") - logger.Warn("Caught OS signal " + signal.String() + ", shutting down") + logger.Warn("Caught OS signal " + receivedSignal.String() + ", shutting down") cancel() case err = <-errorCh: close(errorCh) @@ -113,15 +115,14 @@ func main() { cancel() } + // Shutdown timed sequence, and force exit on second OS signal const shutdownGracePeriod = 5 * time.Second timer := time.NewTimer(shutdownGracePeriod) select { case shutdownErr := <-errorCh: - if !timer.Stop() { - <-timer.C - } + timer.Stop() if shutdownErr != nil { - logger.Warnf("Shutdown not completed gracefully: %s", shutdownErr) + logger.Warnf("Shutdown failed: %s", shutdownErr) os.Exit(1) } @@ -133,9 +134,6 @@ func main() { case <-timer.C: logger.Warn("Shutdown timed out") os.Exit(1) - case signal := <-signalCh: - logger.Warn("Caught OS signal " + signal.String() + ", forcing shut down") - os.Exit(1) } }