diff --git a/server.c b/server.c index 5e209a7..297c62e 100644 --- a/server.c +++ b/server.c @@ -155,6 +155,35 @@ server_daemonize(const char *pidfile) { } } +/* global pointer to the server object, used in signal handlers */ +static struct server *__server; + +static void +server_handle_signal(int id) { + + switch(id) { + case SIGHUP: + slog_init(__server); + break; + case SIGTERM: + case SIGINT: + slog(__server, WEBDIS_INFO, "Webdis terminating", 0); + exit(0); + break; + default: + break; + } +} + +static void +server_install_signal_handlers(struct server *s) { + __server = s; + + signal(SIGHUP, server_handle_signal); + signal(SIGTERM, server_handle_signal); + signal(SIGINT, server_handle_signal); +} + int server_start(struct server *s) { @@ -179,8 +208,8 @@ server_start(struct server *s) { slog_init(s); - /* install signal handler to reload logs */ - signal(SIGHUP, slog_reload); + /* install signal handlers */ + server_install_signal_handlers(s); /* start worker threads */ for(i = 0; i < s->cfg->http_threads; ++i) { @@ -203,6 +232,7 @@ server_start(struct server *s) { return -1; } + slog(s, WEBDIS_INFO, "Webdis up and running", 0); event_base_dispatch(s->base); return 0; diff --git a/slog.c b/slog.c index 6aaabd3..087d61b 100644 --- a/slog.c +++ b/slog.c @@ -14,16 +14,12 @@ #include "server.h" #include "conf.h" -/* global pointer to the server objects, used to reload logs */ -static struct server *__server; - /** * Initialize log writer. */ void slog_init(struct server *s) { - __server = s; s->log.self = getpid(); if(s->cfg->logfile) { @@ -47,14 +43,6 @@ slog_init(struct server *s) { s->log.fd = 2; /* stderr */ } -/** - * Reload log file on SIGHUP - */ -void -slog_reload() { - slog_init(__server); -} - /** * Write log message to disk, or stderr. */ diff --git a/webdis.json b/webdis.json index bbc4abc..f4b0714 100644 --- a/webdis.json +++ b/webdis.json @@ -26,6 +26,6 @@ } ], - "verbosity": 3, + "verbosity": 6, "logfile": "webdis.log" }