diff options
author | Mathias Stearn <mathias@10gen.com> | 2015-01-23 17:34:01 -0500 |
---|---|---|
committer | Ramon Fernandez <ramon.fernandez@mongodb.com> | 2015-01-27 20:35:01 -0500 |
commit | 2bec03aa00484ae15c9729d6611a679f629ae33e (patch) | |
tree | 0a13316964d03e833ab04ec6cbcc8aa039ec2bd9 | |
parent | b059fb303695a7ef90a1489d5d5a4cff3ead707d (diff) | |
download | mongo-2bec03aa00484ae15c9729d6611a679f629ae33e.tar.gz |
SERVER-17031 Don't handle SIGQUIT on the signal handling thread
It doesn't work if CTRL-C hung, which is the primary use case.
(cherry picked from commit 0126c434740e1d659ec252685e57c90b98b4b54f)
-rw-r--r-- | src/mongo/util/signal_handlers.cpp | 4 | ||||
-rw-r--r-- | src/mongo/util/signal_handlers_synchronous.cpp | 3 |
2 files changed, 3 insertions, 4 deletions
diff --git a/src/mongo/util/signal_handlers.cpp b/src/mongo/util/signal_handlers.cpp index 6217ae9bc7b..51dbbcc2525 100644 --- a/src/mongo/util/signal_handlers.cpp +++ b/src/mongo/util/signal_handlers.cpp @@ -177,9 +177,6 @@ namespace { fassert(16782, rotateLogs(serverGlobalParams.logRenameOnRotate)); logProcessDetailsForLogRotate(); break; - case SIGQUIT: - log() << "Received SIGQUIT; terminating."; - quickExit(EXIT_ABRUPT); default: // interrupt/terminate signal log() << "got signal " << actualSignal << " (" << strsignal( actualSignal ) @@ -209,7 +206,6 @@ namespace { sigaddset( &asyncSignals, SIGINT ); } sigaddset( &asyncSignals, SIGTERM ); - sigaddset( &asyncSignals, SIGQUIT ); sigaddset( &asyncSignals, SIGUSR1 ); sigaddset( &asyncSignals, SIGXCPU ); #endif diff --git a/src/mongo/util/signal_handlers_synchronous.cpp b/src/mongo/util/signal_handlers_synchronous.cpp index 3ed71f07fd7..680324ec781 100644 --- a/src/mongo/util/signal_handlers_synchronous.cpp +++ b/src/mongo/util/signal_handlers_synchronous.cpp @@ -266,6 +266,9 @@ namespace { sigemptyset(&addrSignals.sa_mask); addrSignals.sa_flags = SA_SIGINFO; + // ^\ is the stronger ^C. Log and quit hard without waiting for cleanup. + invariant(signal(SIGQUIT, abruptQuit) != SIG_ERR); + invariant(sigaction(SIGSEGV, &addrSignals, 0) == 0); invariant(sigaction(SIGBUS, &addrSignals, 0) == 0); invariant(sigaction(SIGILL, &addrSignals, 0) == 0); |