chore(main): let system handle OS signals after first one to stop program

This commit is contained in:
Quentin McGaw
2024-11-07 20:05:17 +00:00
parent 842b9004da
commit 86d82c1098

View File

@@ -98,11 +98,13 @@ func main() {
errorCh <- _main(ctx, buildInfo, args, logger, reader, tun, netLinker, cmder, cli) errorCh <- _main(ctx, buildInfo, args, logger, reader, tun, netLinker, cmder, cli)
}() }()
// Wait for OS signal or run error
var err error var err error
select { select {
case signal := <-signalCh: case receivedSignal := <-signalCh:
signal.Stop(signalCh)
fmt.Println("") fmt.Println("")
logger.Warn("Caught OS signal " + signal.String() + ", shutting down") logger.Warn("Caught OS signal " + receivedSignal.String() + ", shutting down")
cancel() cancel()
case err = <-errorCh: case err = <-errorCh:
close(errorCh) close(errorCh)
@@ -113,15 +115,14 @@ func main() {
cancel() cancel()
} }
// Shutdown timed sequence, and force exit on second OS signal
const shutdownGracePeriod = 5 * time.Second const shutdownGracePeriod = 5 * time.Second
timer := time.NewTimer(shutdownGracePeriod) timer := time.NewTimer(shutdownGracePeriod)
select { select {
case shutdownErr := <-errorCh: case shutdownErr := <-errorCh:
if !timer.Stop() { timer.Stop()
<-timer.C
}
if shutdownErr != nil { if shutdownErr != nil {
logger.Warnf("Shutdown not completed gracefully: %s", shutdownErr) logger.Warnf("Shutdown failed: %s", shutdownErr)
os.Exit(1) os.Exit(1)
} }
@@ -133,9 +134,6 @@ func main() {
case <-timer.C: case <-timer.C:
logger.Warn("Shutdown timed out") logger.Warn("Shutdown timed out")
os.Exit(1) os.Exit(1)
case signal := <-signalCh:
logger.Warn("Caught OS signal " + signal.String() + ", forcing shut down")
os.Exit(1)
} }
} }