aboutsummaryrefslogtreecommitdiffstats
path: root/src/SignalHandlers.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-08-06 21:31:59 +0200
committerMax Kellermann <max@duempel.org>2013-08-07 10:56:33 +0200
commit930128a7ea11f7012131c4801b86b9b98a7aa9fb (patch)
treec7fa2375e3a99f5207c75e1fbcf533ab4aa5851c /src/SignalHandlers.cxx
parentdb447440ff8973961e1936a6a64ca4971eeeea57 (diff)
downloadmpd-930128a7ea11f7012131c4801b86b9b98a7aa9fb.tar.gz
mpd-930128a7ea11f7012131c4801b86b9b98a7aa9fb.tar.xz
mpd-930128a7ea11f7012131c4801b86b9b98a7aa9fb.zip
SignalHandlers: move code to new class SignalMonitor
Diffstat (limited to 'src/SignalHandlers.cxx')
-rw-r--r--src/SignalHandlers.cxx32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/SignalHandlers.cxx b/src/SignalHandlers.cxx
index ef6be448b..9d43dbee1 100644
--- a/src/SignalHandlers.cxx
+++ b/src/SignalHandlers.cxx
@@ -19,6 +19,7 @@
#include "config.h"
#include "SignalHandlers.hxx"
+#include "event/SignalMonitor.hxx"
#ifndef WIN32
@@ -32,14 +33,12 @@
#include <signal.h>
-static void exit_signal_handler(gcc_unused int signum)
-{
- GlobalEvents::Emit(GlobalEvents::SHUTDOWN);
-}
+static EventLoop *shutdown_loop;
-static void reload_signal_handler(gcc_unused int signum)
+static void
+HandleShutdownSignal()
{
- GlobalEvents::Emit(GlobalEvents::RELOAD);
+ shutdown_loop->Break();
}
static void
@@ -58,8 +57,11 @@ handle_reload_event(void)
#endif
-void initSigHandlers(void)
+void
+SignalHandlersInit(EventLoop &loop)
{
+ SignalMonitorInit(loop);
+
#ifndef WIN32
struct sigaction sa;
@@ -68,12 +70,16 @@ void initSigHandlers(void)
sa.sa_handler = SIG_IGN;
x_sigaction(SIGPIPE, &sa);
- sa.sa_handler = exit_signal_handler;
- x_sigaction(SIGINT, &sa);
- x_sigaction(SIGTERM, &sa);
+ shutdown_loop = &loop;
+ SignalMonitorRegister(SIGINT, HandleShutdownSignal);
+ SignalMonitorRegister(SIGTERM, HandleShutdownSignal);
- GlobalEvents::Register(GlobalEvents::RELOAD, handle_reload_event);
- sa.sa_handler = reload_signal_handler;
- x_sigaction(SIGHUP, &sa);
+ SignalMonitorRegister(SIGHUP, handle_reload_event);
#endif
}
+
+void
+SignalHandlersFinish()
+{
+ SignalMonitorFinish();
+}