Reset the signal handlers when SIGINT or SIGTERM is received
To avoid doing a double exit when receiving bot SIGINT and SIGTERM
This commit is contained in:
@@ -40,6 +40,18 @@ int config_help(const std::string& missing_option)
|
||||
|
||||
static void sigint_handler(int sig, siginfo_t*, void*)
|
||||
{
|
||||
// We reset the SIGTERM or SIGINT (the one that didn't trigger this
|
||||
// handler) signal handler to its default value. This avoid calling this
|
||||
// handler twice, if the process receive both signals in a quick
|
||||
// succession.
|
||||
int sig_to_reset = (sig == SIGINT? SIGTERM: SIGINT);
|
||||
sigset_t mask;
|
||||
sigemptyset(&mask);
|
||||
struct sigaction sigreset = {};
|
||||
sigreset.sa_handler = SIG_DFL;
|
||||
sigreset.sa_mask = mask;
|
||||
sigaction(sig_to_reset, &sigreset, nullptr);
|
||||
|
||||
// In 2 seconds, repeat the same signal, to force the exit
|
||||
TimedEventsManager::instance().add_event(TimedEvent(std::chrono::steady_clock::now() + 2s,
|
||||
[sig]() { raise(sig); }));
|
||||
|
||||
Reference in New Issue
Block a user