summaryrefslogtreecommitdiffstats
path: root/sd_event_loop.cpp
diff options
context:
space:
mode:
authorVernon Mauery <vernon.mauery@linux.intel.com>2018-10-24 14:51:23 -0700
committerVernon Mauery <vernon.mauery@linux.intel.com>2018-12-19 15:40:36 -0800
commit22c8a210c4428fc0918c35f2a0223c8c76d0eeaf (patch)
tree0382dc430dab6450debf5ce8aa9e95500906b563 /sd_event_loop.cpp
parentfc37e59e2f85e585ee830e801b5b26a2c859c86b (diff)
downloadphosphor-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.cpp40
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;
OpenPOWER on IntegriCloud