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:
parent
e93136ef0f
commit
2f71b647f4
@ -40,6 +40,9 @@ enum pipe_event {
|
|||||||
/** must call syncPlayerAndPlaylist() */
|
/** must call syncPlayerAndPlaylist() */
|
||||||
PIPE_EVENT_PLAYLIST,
|
PIPE_EVENT_PLAYLIST,
|
||||||
|
|
||||||
|
/** SIGHUP received: reload configuration, roll log file */
|
||||||
|
PIPE_EVENT_RELOAD,
|
||||||
|
|
||||||
PIPE_EVENT_MAX
|
PIPE_EVENT_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -18,10 +18,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "sig_handlers.h"
|
#include "sig_handlers.h"
|
||||||
#include "command.h"
|
|
||||||
#include "signal_check.h"
|
#include "signal_check.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "event_pipe.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
@ -34,6 +34,11 @@ static void exit_signal_handler(G_GNUC_UNUSED int signum)
|
|||||||
g_main_loop_quit(main_loop);
|
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
|
static void
|
||||||
x_sigaction(int signum, const struct sigaction *act)
|
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));
|
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");
|
||||||
DEBUG("got SIGHUP, rereading DB\n");
|
cycle_log_files();
|
||||||
signal_clear(SIGHUP);
|
|
||||||
if (cycle_log_files() < 0)
|
|
||||||
return COMMAND_RETURN_KILL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void initSigHandlers(void)
|
void initSigHandlers(void)
|
||||||
@ -66,6 +66,9 @@ void initSigHandlers(void)
|
|||||||
x_sigaction(SIGINT, &sa);
|
x_sigaction(SIGINT, &sa);
|
||||||
x_sigaction(SIGTERM, &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(SIGUSR1);
|
||||||
signal_handle(SIGHUP);
|
|
||||||
}
|
}
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
#ifndef MPD_SIG_HANDLERS_H
|
#ifndef MPD_SIG_HANDLERS_H
|
||||||
#define MPD_SIG_HANDLERS_H
|
#define MPD_SIG_HANDLERS_H
|
||||||
|
|
||||||
int handlePendingSignals(void);
|
|
||||||
|
|
||||||
void initSigHandlers(void);
|
void initSigHandlers(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user