Fixup: make signal handlers a bit simpler.

No need to spawn a goroutine, nor wait for a channel.
Let's just put everything in a single select call.

Signed-off-by: Xavier Nicollet <xnicollet@gmail.com>
This commit is contained in:
Xavier Nicollet 2022-10-17 21:04:10 +01:00 committed by Xavier Nicollet
parent 1045dc0f21
commit 7dd34c6b4c
1 changed files with 7 additions and 19 deletions

View File

@ -547,31 +547,19 @@ func run() int {
}() }()
var ( var (
hup = make(chan os.Signal, 1) hup = make(chan os.Signal, 1)
hupReady = make(chan bool) term = make(chan os.Signal, 1)
term = make(chan os.Signal, 1)
) )
signal.Notify(hup, syscall.SIGHUP) signal.Notify(hup, syscall.SIGHUP)
signal.Notify(term, os.Interrupt, syscall.SIGTERM) signal.Notify(term, os.Interrupt, syscall.SIGTERM)
go func() {
<-hupReady
for {
select {
case <-hup:
// ignore error, already logged in `reload()`
_ = configCoordinator.Reload()
case errc := <-webReload:
errc <- configCoordinator.Reload()
}
}
}()
// Wait for reload or termination signals.
close(hupReady) // Unblock SIGHUP handler.
for { for {
select { select {
case <-hup:
// ignore error, already logged in `reload()`
_ = configCoordinator.Reload()
case errc := <-webReload:
errc <- configCoordinator.Reload()
case <-term: case <-term:
level.Info(logger).Log("msg", "Received SIGTERM, exiting gracefully...") level.Info(logger).Log("msg", "Received SIGTERM, exiting gracefully...")
return 0 return 0