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:
parent
7c6d710bcf
commit
86277395cf
@ -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")
|
||||||
|
Loading…
Reference in New Issue
Block a user