diff options
-rw-r--r-- | src/mongo/util/signal_handlers.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mongo/util/signal_handlers.cpp b/src/mongo/util/signal_handlers.cpp index ce01fede77f..27571b0f775 100644 --- a/src/mongo/util/signal_handlers.cpp +++ b/src/mongo/util/signal_handlers.cpp @@ -33,6 +33,7 @@ #include "mongo/util/signal_handlers.h" #include <signal.h> +#include <time.h> #if !defined(_WIN32) #include <unistd.h> @@ -163,6 +164,9 @@ sigset_t asyncSignals; void signalProcessingThread() { setThreadName("signalProcessingThread"); + time_t signalTimeSeconds = -1; + time_t lastSignalTimeSeconds = -1; + while (true) { int actualSignal = 0; int status = sigwait(&asyncSignals, &actualSignal); @@ -170,6 +174,13 @@ void signalProcessingThread() { switch (actualSignal) { case SIGUSR1: // log rotate signal + signalTimeSeconds = time(0); + if (signalTimeSeconds <= lastSignalTimeSeconds) { + // ignore multiple signals in the same or earlier second. + break; + } + + lastSignalTimeSeconds = signalTimeSeconds; fassert(16782, rotateLogs(serverGlobalParams.logRenameOnRotate)); logProcessDetailsForLogRotate(); break; |