From 97b730c2e07b1b32158bf579047ba0dfd2b60b47 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Wed, 19 Nov 2014 15:16:48 +0000 Subject: [PATCH] Addition of signal handler for SIGUSR1 to rotate all log files --- server/core/gateway.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/server/core/gateway.c b/server/core/gateway.c index 8ea29813f..109168221 100644 --- a/server/core/gateway.c +++ b/server/core/gateway.c @@ -195,6 +195,21 @@ static void sighup_handler (int i) config_reload(); } +/** + * Handler for SIGUSR1 signal. A SIGUSR1 signal will cause + * maxscale to rotate all log files. + */ +static void sigusr1_handler (int i) +{ + LOGIF(LM, (skygw_log_write( + LOGFILE_MESSAGE, + "Log file flush following reception of SIGUSR1\n"))); + skygw_log_rotate(LOGFILE_ERROR); + skygw_log_rotate(LOGFILE_MESSAGE); + skygw_log_rotate(LOGFILE_TRACE); + skygw_log_rotate(LOGFILE_DEBUG); +} + static void sigterm_handler (int i) { extern void shutdown_server(); @@ -1234,6 +1249,18 @@ int main(int argc, char **argv) rc = MAXSCALE_INTERNALERROR; goto return_main; } + r = sigdelset(&sigset, SIGUSR1); + + if (r != 0) + { + char* logerr = "Failed to delete signal SIGUSR1 from the " + "signal set of MaxScale. Exiting."; + eno = errno; + errno = 0; + print_log_n_stderr(true, true, fprerr, logerr, eno); + rc = MAXSCALE_INTERNALERROR; + goto return_main; + } r = sigdelset(&sigset, SIGTERM); if (r != 0) @@ -1335,6 +1362,14 @@ int main(int argc, char **argv) "SIGHUP. Exiting."); goto sigset_err; } + l = signal_set(SIGUSR1, sigusr1_handler); + + if (l != 0) + { + logerr = strdup("Failed to set signal handler for " + "SIGUSR1. Exiting."); + goto sigset_err; + } l = signal_set(SIGTERM, sigterm_handler); if (l != 0)