Skip to content

Commit

Permalink
dhtnode: graceful signal handling in service and daemon modes
Browse files Browse the repository at this point in the history
  • Loading branch information
aberaud committed Jun 29, 2017
1 parent 673884a commit 42fa09a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
3 changes: 1 addition & 2 deletions tools/dhtnode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,8 +386,7 @@ main(int argc, char **argv)
}

if (params.daemonize or params.service) {
while (true)
std::this_thread::sleep_for(std::chrono::seconds(30));
while (runner.wait());
} else {
cmd_loop(dht, params);
}
Expand Down
26 changes: 25 additions & 1 deletion tools/tools_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

// Common utility methods used by C++ OpenDHT tools.
#pragma once

#include <opendht.h>
#ifndef WIN32_NATIVE
Expand All @@ -37,6 +38,8 @@
#include <string>
#include <vector>
#include <chrono>
#include <mutex>
#include <condition_variable>
#include <iostream>
#include <sstream>
#include <fstream>
Expand Down Expand Up @@ -204,13 +207,33 @@ readLine(const char* prefix = PROMPT)
return line_read ? std::string(line_read) : std::string("\0", 1);
}

struct ServiceRunner {
bool wait() {
std::unique_lock<std::mutex> lock(m);
cv.wait(lock, [&]{return terminate;});
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;
};

ServiceRunner runner;

void signal_handler(int sig)
{
switch(sig) {
case SIGHUP:
break;
case SIGINT:
case SIGTERM:
exit(EXIT_SUCCESS);
runner.kill();
break;
}
}
Expand All @@ -223,6 +246,7 @@ void setupSignals()
signal(SIGTTOU,SIG_IGN);
signal(SIGTTIN,SIG_IGN);
signal(SIGHUP,signal_handler); /* catch hangup signal */
signal(SIGINT,signal_handler); /* catch interrupt signal */
signal(SIGTERM,signal_handler); /* catch kill signal */
#endif
}
Expand Down

0 comments on commit 42fa09a

Please sign in to comment.