summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-04-21 21:24:52 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-04-21 21:24:52 +0000
commite4af2d77fd9538c6e683f934459fcdc6cb1d3207 (patch)
tree88dba8dc8e951f46d7ac66dcdc3526f7c108bf06 /vespalib
parentbbf11af22fff91b6f8f757a252ee4255bd018166 (diff)
handle sig int in separate thread
this is needed since socket handle now masks all signals
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/net/socket/socket_server.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/vespalib/src/tests/net/socket/socket_server.cpp b/vespalib/src/tests/net/socket/socket_server.cpp
index c14c69caa70..b6af5fa120b 100644
--- a/vespalib/src/tests/net/socket/socket_server.cpp
+++ b/vespalib/src/tests/net/socket/socket_server.cpp
@@ -38,6 +38,14 @@ void write_msg(SocketHandle &socket, const vespalib::string &msg) {
}
}
+void kill_func() {
+ while (!SignalHandler::INT.check()) {
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ }
+ fprintf(stderr, "exiting...\n");
+ kill(getpid(), SIGTERM);
+}
+
int main(int, char **) {
ServerSocket server(0);
if (!server.valid()) {
@@ -57,7 +65,8 @@ int main(int, char **) {
HostName::get().c_str(), server.address().port());
fprintf(stderr, "use ^C (SIGINT) to exit\n");
SignalHandler::INT.hook();
- while (!SignalHandler::INT.check()) {
+ std::thread kill_thread(kill_func);
+ for (;;) {
SocketHandle socket = server.accept();
if (socket.valid()) {
fprintf(stderr, "got connection from: %s (local address: %s)\n",