summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-10-18 08:56:25 +0200
committerMax Kellermann <max@duempel.org>2013-10-18 08:56:25 +0200
commitbf8660b21c31075c2c76c0075791871035115c7d (patch)
tree00ecfab62a7eced860e961baca03c75477221b5d /test
parent43863a70c87c80e3a15315f561c3a247b27c81fa (diff)
test/run_inotify: use SignalMonitor
Diffstat (limited to 'test')
-rw-r--r--test/ShutdownHandler.cxx48
-rw-r--r--test/ShutdownHandler.hxx36
-rw-r--r--test/run_inotify.cxx25
3 files changed, 89 insertions, 20 deletions
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;
}