16552: Fix signal handling.
authorTom Clegg <tom@curii.com>
Thu, 30 Jun 2022 04:10:44 +0000 (00:10 -0400)
committerTom Clegg <tom@curii.com>
Thu, 30 Jun 2022 04:10:44 +0000 (00:10 -0400)
Signal handlers shouldn't stop when Start returns.

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

lib/boot/supervisor.go

index 52cd0b16167a9d9f31767cb9ec4975c1eee1e8fc..9ed92cb1aa4b6b7200220167330ca8d4727d6b69 100644 (file)
@@ -113,28 +113,24 @@ func (super *Supervisor) Start(ctx context.Context) {
        super.done = make(chan struct{})
 
        sigch := make(chan os.Signal)
-       signal.Notify(sigch, syscall.SIGINT, syscall.SIGTERM)
-       defer signal.Stop(sigch)
+       signal.Notify(sigch, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
        go func() {
-               for sig := range sigch {
-                       super.logger.WithField("signal", sig).Info("caught signal")
-                       if super.err == nil {
-                               super.err = fmt.Errorf("caught signal %s", sig)
-                       }
-                       super.cancel()
-               }
-       }()
-
-       hupch := make(chan os.Signal)
-       signal.Notify(hupch, syscall.SIGHUP)
-       defer signal.Stop(hupch)
-       go func() {
-               for sig := range hupch {
-                       super.logger.WithField("signal", sig).Info("caught signal")
-                       if super.err == nil {
-                               super.err = errNeedConfigReload
+               defer signal.Stop(sigch)
+               for {
+                       select {
+                       case <-ctx.Done():
+                               return
+                       case sig := <-sigch:
+                               super.logger.WithField("signal", sig).Info("caught signal")
+                               if super.err == nil {
+                                       if sig == syscall.SIGHUP {
+                                               super.err = errNeedConfigReload
+                                       } else {
+                                               super.err = fmt.Errorf("caught signal %s", sig)
+                                       }
+                               }
+                               super.cancel()
                        }
-                       super.cancel()
                }
        }()