提交 ab882795 编写于 作者: P Pavel Kartavyy

BaseDaemon: terminate on double SIGINT

上级 c4017da0
...@@ -191,5 +191,6 @@ protected: ...@@ -191,5 +191,6 @@ protected:
std::mutex signal_handler_mutex; std::mutex signal_handler_mutex;
std::condition_variable signal_event; std::condition_variable signal_event;
size_t terminate_signals_counter = 0; std::atomic_size_t terminate_signals_counter{0};
std::atomic_size_t sigint_signals_counter{0};
}; };
...@@ -909,6 +909,7 @@ void BaseDaemon::handleSignal(int signal_id) ...@@ -909,6 +909,7 @@ void BaseDaemon::handleSignal(int signal_id)
std::unique_lock<std::mutex> lock(signal_handler_mutex); std::unique_lock<std::mutex> lock(signal_handler_mutex);
{ {
++terminate_signals_counter; ++terminate_signals_counter;
sigint_signals_counter += signal_id == SIGINT;
signal_event.notify_all(); signal_event.notify_all();
} }
...@@ -921,9 +922,13 @@ void BaseDaemon::handleSignal(int signal_id) ...@@ -921,9 +922,13 @@ void BaseDaemon::handleSignal(int signal_id)
void BaseDaemon::onInterruptSignals(int signal_id) void BaseDaemon::onInterruptSignals(int signal_id)
{ {
is_cancelled = true; is_cancelled = true;
LOG_INFO(&logger(), LOG_INFO(&logger(), "Received termination signal (" << strsignal(signal_id) << ")");
"Received termination signal (" << strsignal(signal_id) << ")."
" Terminate is requested " << terminate_signals_counter << " times."); if (sigint_signals_counter >= 2)
{
LOG_INFO(&logger(), "Received second signal Interrupt. Immediately terminate.");
kill();
}
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册