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.

Signed-off-by: Liu Hua <weldonliu@tencent.com>
This commit is contained in:
Liu Hua 2021-01-08 19:26:57 +08:00
parent 7c6d710bcf
commit 86277395cf

View File

@ -45,12 +45,17 @@ func handleSignals(ctx context.Context, signals chan os.Signal, serverC chan *se
case s := <-serverC: case s := <-serverC:
server = s server = s
case s := <-signals: 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") log.G(ctx).WithField("signal", s).Debug("received signal")
switch s { switch s {
case unix.SIGUSR1: case unix.SIGUSR1:
dumpStacks(true) dumpStacks(true)
case unix.SIGPIPE:
continue
default: default:
if err := notifyStopping(ctx); err != nil { if err := notifyStopping(ctx); err != nil {
log.G(ctx).WithError(err).Error("notify stopping failed") log.G(ctx).WithError(err).Error("notify stopping failed")