diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index db87a5e20e7cb5724d6eda57cc72acfd11782455..fc9e220dd89afd4dad1b2e17370a130151bcc9c0 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 d0cb757be6d1334082feaff0f2f8c2a90bde4c03..a64a5b9fffde193a1d305bac0759d2e3fbb39145 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 }