From 93ead7ee99d55c5f0ad502639472f15e5269e90d Mon Sep 17 00:00:00 2001 From: kakwa Date: Wed, 31 Aug 2016 07:57:51 +0200 Subject: [PATCH] implementing a somewhat proper signal handler --- inc/utils.h | 2 ++ src/lib/http.c | 5 ++++- src/lib/utils.c | 14 +++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/inc/utils.h b/inc/utils.h index cb64335..ff22742 100644 --- a/inc/utils.h +++ b/inc/utils.h @@ -5,3 +5,5 @@ void uts_logger(rfc3161_context *ct, int priority, char *fmt, ...); void log_hex(rfc3161_context *ct, int priority, char *id, unsigned char *content, int content_length); int set_params(rfc3161_context *ct, char *conf_file); +int g_uts_sig_up; +int g_uts_sig; diff --git a/src/lib/http.c b/src/lib/http.c index e70a1ab..f53f127 100644 --- a/src/lib/http.c +++ b/src/lib/http.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "http.h" void log_request_debug(const struct mg_request_info *request_info, @@ -147,7 +148,9 @@ int http_server_start(char *conffile, bool stdout_dbg) { // Wait until user hits "enter". Server is running in separate thread. // Navigating to http://localhost:8080 will invoke begin_request_handler(). - getchar(); + while ( g_uts_sig == 0 ){ + sleep(1); + } // Stop the server. mg_stop(ctx); diff --git a/src/lib/utils.c b/src/lib/utils.c index 1c36eb9..691fa7f 100644 --- a/src/lib/utils.c +++ b/src/lib/utils.c @@ -30,6 +30,14 @@ CODE prioritynames[] = {{"alert", LOG_ALERT}, {"warning", LOG_WARNING}, {NULL, -1}}; +static void signal_handler_general(int sig_num) { + g_uts_sig = sig_num; +} + +static void signal_handler_up(int sig_num) { + g_uts_sig_up = sig_num; +} + void skeleton_daemon() { pid_t pid; @@ -48,10 +56,14 @@ void skeleton_daemon() { if (setsid() < 0) exit(EXIT_FAILURE); + g_uts_sig_up = 0; + g_uts_sig = 0; /* Catch, ignore and handle signals */ // TODO: Implement a working signal handler */ + signal(SIGTERM, signal_handler_general); + signal(SIGINT, signal_handler_general); + signal(SIGHUP, signal_handler_up); signal(SIGCHLD, SIG_IGN); - signal(SIGHUP, SIG_IGN); /* Fork off for the second time*/ pid = fork();