/* * Callback to handle console ctrl events */ static bool WINAPI win_ctrl_handler(DWORD signum) { msg(D_LOW, "win_ctrl_handler: signal received (code=%lu)", (unsigned long) signum); if (siginfo_static.signal_received == SIGTERM) { return true; } switch (signum) { case CTRL_C_EVENT: case CTRL_BREAK_EVENT: throw_signal(SIGTERM); /* trigget the win32_signal to interrupt the event loop */ win_trigger_event(&win32_signal); return true; break; default: msg(D_LOW, "win_ctrl_handler: signal (code=%lu) not handled", (unsigned long) signum); break; } /* pass all other signals to the next handler */ return false; }
/* normal signal handler, when we are in event loop */ static void signal_handler(const int signum) { throw_signal(signum); signal(signum, signal_handler); }