changeset 554:6ff2172d2239

Irccd: fix main loop stop
author David Demelier <markand@malikania.fr>
date Fri, 24 Nov 2017 20:30:42 +0100
parents c135001322a1
children 9b6b0d7d89c6
files irccd/main.cpp
diffstat 1 files changed, 6 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/irccd/main.cpp	Fri Nov 24 20:24:55 2017 +0100
+++ b/irccd/main.cpp	Fri Nov 24 20:30:42 2017 +0100
@@ -102,11 +102,6 @@
     std::exit(0);
 }
 
-void stop(int)
-{
-    running = false;
-}
-
 void init(int& argc, char**& argv)
 {
     // Needed for some components.
@@ -115,18 +110,6 @@
     // Default logging to console.
     log::set_verbose(false);
 
-    // Register some signals.
-    signal(SIGINT, stop);
-    signal(SIGTERM, stop);
-
-#if defined(SIGPIPE)
-    signal(SIGPIPE, SIG_IGN);
-#endif
-
-#if defined(SIGQUIT)
-    signal(SIGQUIT, stop);
-#endif
-
     -- argc;
     ++ argv;
 }
@@ -300,6 +283,7 @@
     init(argc, argv);
 
     boost::asio::io_service service;
+    boost::asio::signal_set sigs(service, SIGINT, SIGTERM);
 
     auto options = parse(argc, argv);
 
@@ -365,6 +349,11 @@
      * associated objects before any other static global values such as
      * loggers.
      */
+    sigs.async_wait([&] (auto, auto) {
+        running = false;
+        service.stop();
+    });
+
     while (running)
         service.run();