diff options
author | Max Kellermann <max@duempel.org> | 2009-01-01 18:51:17 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-01 18:51:17 +0100 |
commit | 2f71b647f48592ced0811ec66907068a3e236d6a (patch) | |
tree | 002b64888a21e6e855585128e64aa39c4fcfae9e /src/sig_handlers.c | |
parent | e93136ef0fac69b4bb7f02ba7e3b348827d597ea (diff) | |
download | mpd-2f71b647f48592ced0811ec66907068a3e236d6a.tar.gz mpd-2f71b647f48592ced0811ec66907068a3e236d6a.tar.xz mpd-2f71b647f48592ced0811ec66907068a3e236d6a.zip |
sig_handlers: use event_pipe for delivering SIGHUP
The signal_check library went out of order when we started using the
GLib main loop. Convert the SIGHUP handler to use event_pipe instead.
Diffstat (limited to '')
-rw-r--r-- | src/sig_handlers.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/sig_handlers.c b/src/sig_handlers.c index 5fefb82a0..660107200 100644 --- a/src/sig_handlers.c +++ b/src/sig_handlers.c @@ -18,10 +18,10 @@ */ #include "sig_handlers.h" -#include "command.h" #include "signal_check.h" #include "log.h" #include "main.h" +#include "event_pipe.h" #include <glib.h> @@ -34,6 +34,11 @@ static void exit_signal_handler(G_GNUC_UNUSED int signum) g_main_loop_quit(main_loop); } +static void reload_signal_handler(G_GNUC_UNUSED int signum) +{ + event_pipe_emit_fast(PIPE_EVENT_RELOAD); +} + static void x_sigaction(int signum, const struct sigaction *act) { @@ -41,16 +46,11 @@ x_sigaction(int signum, const struct sigaction *act) g_error("sigaction() failed: %s", strerror(errno)); } -int handlePendingSignals(void) +static void +handle_reload_event(void) { - if (signal_is_pending(SIGHUP)) { - DEBUG("got SIGHUP, rereading DB\n"); - signal_clear(SIGHUP); - if (cycle_log_files() < 0) - return COMMAND_RETURN_KILL; - } - - return 0; + DEBUG("got SIGHUP, rereading DB\n"); + cycle_log_files(); } void initSigHandlers(void) @@ -66,6 +66,9 @@ void initSigHandlers(void) x_sigaction(SIGINT, &sa); x_sigaction(SIGTERM, &sa); + event_pipe_register(PIPE_EVENT_RELOAD, handle_reload_event); + sa.sa_handler = reload_signal_handler; + x_sigaction(SIGHUP, &sa); + signal_handle(SIGUSR1); - signal_handle(SIGHUP); } |