signal: do not print message when dealing with SIG_PIPE
If we print message when SIG_PIPE occuers in signal handler.
There is a loop {print->SIG_PIPE->print->SIG_PIPE...}, which consume
a lot of cpu time. So do not print message in this situaiton.
@@ -45,12 +45,17 @@ func handleSignals(ctx context.Context, signals chan os.Signal, serverC chan *se
case s := <-serverC:
server = s
case s := <-signals:
+
+ // Do not print message when deailing with SIGPIPE, which may cause
+ // nested signals and consume lots of cpu bandwidth.
+ if s == unix.SIGPIPE {
+ continue
+ }
+
log.G(ctx).WithField("signal", s).Debug("received signal")
switch s {
case unix.SIGUSR1:
dumpStacks(true)
- case unix.SIGPIPE:
- continue
default:
if err := notifyStopping(ctx); err != nil {
log.G(ctx).WithError(err).Error("notify stopping failed")
