Commit 2f71b647 authored by Max Kellermann's avatar Max Kellermann

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.
parent e93136ef
......@@ -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
};
......
......@@ -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);
}
......@@ -19,8 +19,6 @@
#ifndef MPD_SIG_HANDLERS_H
#define MPD_SIG_HANDLERS_H
int handlePendingSignals(void);
void initSigHandlers(void);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment