From 561f0e2f4f8ae297eab94bf84aae154bcf2ace18 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Mon, 8 Jul 2019 22:49:30 +0200 Subject: [PATCH] Supernode graceful termination in Windows Closes #163 --- edge.c | 25 +++++++++---------------- sn.c | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/edge.c b/edge.c index 36edb8d..33096ac 100644 --- a/edge.c +++ b/edge.c @@ -558,7 +558,12 @@ static void daemonize() { static int keep_on_running; -static void term_handler(int sig) { +#ifdef WIN32 +BOOL WINAPI term_handler(DWORD sig) +#else +static void term_handler(int sig) +#endif +{ static int called = 0; if(called) { @@ -570,22 +575,10 @@ static void term_handler(int sig) { } keep_on_running = 0; -} - -/* *************************************************** */ - #ifdef WIN32 - -BOOL WINAPI CtrlHandler(DWORD fdwCtrlType) { - if(fdwCtrlType == CTRL_C_EVENT) { - term_handler(0); - return(TRUE); - } - - return(FALSE); -} - + return(TRUE); #endif +} /* *************************************************** */ @@ -703,7 +696,7 @@ int main(int argc, char* argv[]) { signal(SIGINT, term_handler); #endif #ifdef WIN32 - SetConsoleCtrlHandler(CtrlHandler, TRUE); + SetConsoleCtrlHandler(term_handler, TRUE); #endif keep_on_running = 1; diff --git a/sn.c b/sn.c index 652c2fb..e02d483 100644 --- a/sn.c +++ b/sn.c @@ -944,9 +944,12 @@ static void dump_registrations(int signo) { static int keep_running; -#ifdef __linux__ - -static void term_handler(int sig) { +#ifdef WIN32 +BOOL WINAPI term_handler(DWORD sig) +#else +static void term_handler(int sig) +#endif +{ static int called = 0; if(called) { @@ -958,8 +961,10 @@ static void term_handler(int sig) { } keep_running = 0; -} +#ifdef WIN32 + return(TRUE); #endif +} /* *************************************************** */ @@ -1022,6 +1027,9 @@ int main(int argc, char * const argv[]) { signal(SIGINT, term_handler); signal(SIGHUP, dump_registrations); #endif +#ifdef WIN32 + SetConsoleCtrlHandler(term_handler, TRUE); +#endif keep_running = 1; return run_loop(&sss_node);