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.
This commit is contained in:
Max Kellermann 2009-01-01 18:51:17 +01:00
parent e93136ef0f
commit 2f71b647f4
3 changed files with 17 additions and 13 deletions

View File

@ -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
};

View File

@ -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);
}

View File

@ -19,8 +19,6 @@
#ifndef MPD_SIG_HANDLERS_H
#define MPD_SIG_HANDLERS_H
int handlePendingSignals(void);
void initSigHandlers(void);
#endif