Mercurial > irccd
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();