From 2f71b647f48592ced0811ec66907068a3e236d6a Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 1 Jan 2009 18:51:17 +0100 Subject: 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. --- src/event_pipe.h | 3 +++ src/sig_handlers.c | 25 ++++++++++++++----------- src/sig_handlers.h | 2 -- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/event_pipe.h b/src/event_pipe.h index 8da10c759..3888939c8 100644 --- a/src/event_pipe.h +++ b/src/event_pipe.h @@ -40,6 +40,9 @@ enum pipe_event { /** must call syncPlayerAndPlaylist() */ PIPE_EVENT_PLAYLIST, + /** SIGHUP received: reload configuration, roll log file */ + PIPE_EVENT_RELOAD, + PIPE_EVENT_MAX }; 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 @@ -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); } diff --git a/src/sig_handlers.h b/src/sig_handlers.h index a7a2c6f02..0dc1c569b 100644 --- a/src/sig_handlers.h +++ b/src/sig_handlers.h @@ -19,8 +19,6 @@ #ifndef MPD_SIG_HANDLERS_H #define MPD_SIG_HANDLERS_H -int handlePendingSignals(void); - void initSigHandlers(void); #endif -- cgit v1.2.3