Skip to content
Snippets Groups Projects
Commit 77750543 authored by Adrien Béraud's avatar Adrien Béraud
Browse files

tools: always handle signals, don't block in signal handling

parent 18c31612
No related branches found
No related tags found
No related merge requests found
...@@ -503,9 +503,8 @@ main(int argc, char **argv) ...@@ -503,9 +503,8 @@ main(int argc, char **argv)
if (params.daemonize) { if (params.daemonize) {
daemonize(); daemonize();
} else if (params.service) {
setupSignals();
} }
setupSignals();
auto node = std::make_shared<DhtRunner>(); auto node = std::make_shared<DhtRunner>();
...@@ -576,7 +575,7 @@ main(int argc, char **argv) ...@@ -576,7 +575,7 @@ main(int argc, char **argv)
std::condition_variable cv; std::condition_variable cv;
std::mutex m; std::mutex m;
std::atomic_bool done {false}; bool done {false};
node->shutdown([&]() node->shutdown([&]()
{ {
...@@ -587,7 +586,7 @@ main(int argc, char **argv) ...@@ -587,7 +586,7 @@ main(int argc, char **argv)
// wait for shutdown // wait for shutdown
std::unique_lock<std::mutex> lk(m); std::unique_lock<std::mutex> lk(m);
cv.wait(lk, [&](){ return done.load(); }); cv.wait(lk, [&](){ return done; });
node->join(); node->join();
#ifdef WIN32_NATIVE #ifdef WIN32_NATIVE
......
...@@ -282,18 +282,17 @@ readLine(const char* prefix = PROMPT) ...@@ -282,18 +282,17 @@ readLine(const char* prefix = PROMPT)
struct ServiceRunner { struct ServiceRunner {
bool wait() { bool wait() {
std::unique_lock<std::mutex> lock(m); std::unique_lock<std::mutex> lock(m);
cv.wait(lock, [&]{return terminate;}); cv.wait(lock, [&]{return terminate.load();});
return !terminate; return !terminate;
} }
void kill() { void kill() {
std::lock_guard<std::mutex> lock(m);
terminate = true; terminate = true;
cv.notify_all(); cv.notify_all();
} }
private: private:
std::condition_variable cv; std::condition_variable cv;
std::mutex m; std::mutex m;
bool terminate = false; std::atomic_bool terminate {false};
}; };
ServiceRunner runner; ServiceRunner runner;
...@@ -340,7 +339,5 @@ void daemonize() ...@@ -340,7 +339,5 @@ void daemonize()
close(STDIN_FILENO); close(STDIN_FILENO);
close(STDOUT_FILENO); close(STDOUT_FILENO);
close(STDERR_FILENO); close(STDERR_FILENO);
setupSignals();
#endif #endif
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment