diff options
author | Vernon Mauery <vernon.mauery@linux.intel.com> | 2018-10-24 14:51:23 -0700 |
---|---|---|
committer | Vernon Mauery <vernon.mauery@linux.intel.com> | 2018-12-19 15:40:36 -0800 |
commit | 22c8a210c4428fc0918c35f2a0223c8c76d0eeaf (patch) | |
tree | 0382dc430dab6450debf5ce8aa9e95500906b563 /sd_event_loop.cpp | |
parent | fc37e59e2f85e585ee830e801b5b26a2c859c86b (diff) | |
download | phosphor-net-ipmid-22c8a210c4428fc0918c35f2a0223c8c76d0eeaf.tar.gz phosphor-net-ipmid-22c8a210c4428fc0918c35f2a0223c8c76d0eeaf.zip |
netipmid: use boost::asio signal handling
boost::asio provides a signal handling interface that looks familiar to
the rest of its async API. This will allow the event loop to cleanly
shut down upon receipt of SIGTERM or SIGINT.
Change-Id: I6a888a0bb0206e885da9e0fcf4856b96ec93a461
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
Diffstat (limited to 'sd_event_loop.cpp')
-rw-r--r-- | sd_event_loop.cpp | 40 |
1 files changed, 8 insertions, 32 deletions
diff --git a/sd_event_loop.cpp b/sd_event_loop.cpp index c6ad063..3e42d6c 100644 --- a/sd_event_loop.cpp +++ b/sd_event_loop.cpp @@ -176,48 +176,24 @@ int EventLoop::startEventLoop() { int fd = -1; int r = 0; - int listen_fd; - sigset_t ss; + int listenFd; sd_event_source* source = nullptr; sdbusplus::asio::sd_event_wrapper sdEvents(*io); event = sdEvents.get(); - if (sigemptyset(&ss) < 0 || sigaddset(&ss, SIGTERM) < 0 || - sigaddset(&ss, SIGINT) < 0) - { - r = -errno; - return EXIT_FAILURE; - } - - /* Block SIGTERM first, so that the event loop can handle it */ - if (sigprocmask(SIG_BLOCK, &ss, nullptr) < 0) - { - r = -errno; - return EXIT_FAILURE; - } - - /* Let's make use of the default handler and "floating" reference features - * of sd_event_add_signal() */ - r = sd_event_add_signal(event, nullptr, SIGTERM, nullptr, nullptr); - if (r < 0) - { - return EXIT_FAILURE; - } - - r = sd_event_add_signal(event, nullptr, SIGINT, nullptr, nullptr); - if (r < 0) - { - return EXIT_FAILURE; - } + // set up boost::asio signal handling + boost::asio::signal_set signals(*io, SIGINT, SIGTERM); + signals.async_wait([this](const boost::system::error_code& error, + int signalNumber) { io->stop(); }); // Create our own socket if SysD did not supply one. - listen_fd = sd_listen_fds(0); - if (listen_fd == 1) + listenFd = sd_listen_fds(0); + if (listenFd == 1) { fd = SD_LISTEN_FDS_START; } - else if (listen_fd > 1) + else if (listenFd > 1) { log<level::ERR>("Too many file descriptors received"); return 1; |