summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--test/ShutdownHandler.cxx48
-rw-r--r--test/ShutdownHandler.hxx36
-rw-r--r--test/run_inotify.cxx25
4 files changed, 90 insertions, 20 deletions
diff --git a/Makefile.am b/Makefile.am
index 103975faa..75106ac71 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1424,6 +1424,7 @@ endif
if ENABLE_INOTIFY
noinst_PROGRAMS += test/run_inotify
test_run_inotify_SOURCES = test/run_inotify.cxx \
+ test/ShutdownHandler.cxx test/ShutdownHandler.hxx \
src/Log.cxx \
src/InotifyDomain.cxx \
src/InotifySource.cxx
diff --git a/test/ShutdownHandler.cxx b/test/ShutdownHandler.cxx
new file mode 100644
index 000000000..341a92939
--- /dev/null
+++ b/test/ShutdownHandler.cxx
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+#include "ShutdownHandler.hxx"
+
+#ifndef WIN32
+#include "event/SignalMonitor.hxx"
+#include "event/Loop.hxx"
+
+#include <signal.h>
+
+static void
+HandleShutdownSignal()
+{
+ SignalMonitorGetEventLoop().Break();
+}
+
+ShutdownHandler::ShutdownHandler(EventLoop &loop)
+{
+ SignalMonitorInit(loop);
+
+ SignalMonitorRegister(SIGINT, HandleShutdownSignal);
+ SignalMonitorRegister(SIGTERM, HandleShutdownSignal);
+}
+
+ShutdownHandler::~ShutdownHandler()
+{
+ SignalMonitorFinish();
+}
+
+#endif
diff --git a/test/ShutdownHandler.hxx b/test/ShutdownHandler.hxx
new file mode 100644
index 000000000..0a84ed63f
--- /dev/null
+++ b/test/ShutdownHandler.hxx
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPD_TEST_SHUTDOWN_HANDLER_HXX
+#define MPD_TEST_SHUTDOWN_HANDLER_HXX
+
+class EventLoop;
+
+class ShutdownHandler {
+public:
+ ShutdownHandler(EventLoop &loop);
+ ~ShutdownHandler();
+};
+
+#ifdef WIN32
+ShutdownHandler::ShutdownHandler(EventLoop &loop) {}
+ShutdownHandler::~ShutdownHandler() {}
+#endif
+
+#endif
diff --git a/test/run_inotify.cxx b/test/run_inotify.cxx
index 6796480e5..fb614432e 100644
--- a/test/run_inotify.cxx
+++ b/test/run_inotify.cxx
@@ -18,6 +18,7 @@
*/
#include "config.h"
+#include "ShutdownHandler.hxx"
#include "InotifySource.hxx"
#include "event/Loop.hxx"
#include "util/Error.hxx"
@@ -26,15 +27,6 @@
#include <glib.h>
#include <sys/inotify.h>
-#include <signal.h>
-
-static EventLoop *event_loop;
-
-static void
-exit_signal_handler(gcc_unused int signum)
-{
- event_loop->Break();
-}
enum {
IN_MASK = IN_ATTRIB|IN_CLOSE_WRITE|IN_CREATE|IN_DELETE|IN_DELETE_SELF
@@ -62,10 +54,11 @@ int main(int argc, char **argv)
path = argv[1];
- event_loop = new EventLoop(EventLoop::Default());
+ EventLoop event_loop((EventLoop::Default()));
+ const ShutdownHandler shutdown_handler(event_loop);
Error error;
- InotifySource *source = InotifySource::Create(*event_loop,
+ InotifySource *source = InotifySource::Create(event_loop,
my_inotify_callback,
nullptr, error);
if (source == NULL) {
@@ -80,15 +73,7 @@ int main(int argc, char **argv)
return 2;
}
- struct sigaction sa;
- sa.sa_flags = 0;
- sigemptyset(&sa.sa_mask);
- sa.sa_handler = exit_signal_handler;
- sigaction(SIGINT, &sa, NULL);
- sigaction(SIGTERM, &sa, NULL);
-
- event_loop->Run();
+ event_loop.Run();
delete source;
- delete event_loop;
}