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