From 777505434ca565d510c99df3079067b3a6eaaff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Sat, 8 Jun 2019 09:23:34 -0400 Subject: [PATCH] tools: always handle signals, don't block in signal handling --- tools/dhtnode.cpp | 7 +++---- tools/tools_common.h | 7 ++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index db87a5e2..fc9e220d 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -503,9 +503,8 @@ main(int argc, char **argv) if (params.daemonize) { daemonize(); - } else if (params.service) { - setupSignals(); } + setupSignals(); auto node = std::make_shared<DhtRunner>(); @@ -576,7 +575,7 @@ main(int argc, char **argv) std::condition_variable cv; std::mutex m; - std::atomic_bool done {false}; + bool done {false}; node->shutdown([&]() { @@ -587,7 +586,7 @@ main(int argc, char **argv) // wait for shutdown std::unique_lock<std::mutex> lk(m); - cv.wait(lk, [&](){ return done.load(); }); + cv.wait(lk, [&](){ return done; }); node->join(); #ifdef WIN32_NATIVE diff --git a/tools/tools_common.h b/tools/tools_common.h index d0cb757b..a64a5b9f 100644 --- a/tools/tools_common.h +++ b/tools/tools_common.h @@ -282,18 +282,17 @@ readLine(const char* prefix = PROMPT) struct ServiceRunner { bool wait() { std::unique_lock<std::mutex> lock(m); - cv.wait(lock, [&]{return terminate;}); + cv.wait(lock, [&]{return terminate.load();}); return !terminate; } void kill() { - std::lock_guard<std::mutex> lock(m); terminate = true; cv.notify_all(); } private: std::condition_variable cv; std::mutex m; - bool terminate = false; + std::atomic_bool terminate {false}; }; ServiceRunner runner; @@ -340,7 +339,5 @@ void daemonize() close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); - - setupSignals(); #endif } -- GitLab