diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-07-24 11:47:51 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-07-24 11:47:51 +0200 |
commit | 0fae20c36226c8596dd9676c354ca957808ea3d1 (patch) | |
tree | 193322786152b4c7395d884fbbb51515935e5528 /src | |
parent | aa1560ca079148f5656cbec0d8057d551cb571ff (diff) |
Use pthread_cancel instead of a signal
Signal handlers are process-wide, so sending SIGINT to the monitor
thread will cause the normal SIGINT handler to run. This sets the
isInterrupted flag, which is not what we want. So use pthread_cancel
instead.
Diffstat (limited to 'src')
-rw-r--r-- | src/libutil/monitor-fd.hh | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/libutil/monitor-fd.hh b/src/libutil/monitor-fd.hh index 6f7f9792c..72d23fb69 100644 --- a/src/libutil/monitor-fd.hh +++ b/src/libutil/monitor-fd.hh @@ -24,10 +24,7 @@ public: struct pollfd fds[1]; fds[0].fd = fd; fds[0].events = 0; - if (poll(fds, 1, -1) == -1) { - if (errno != EINTR) abort(); // can't happen - return; // destructor is asking us to exit - } + if (poll(fds, 1, -1) == -1) abort(); // can't happen assert(fds[0].revents & POLLHUP); /* We got POLLHUP, so send an INT signal to the main thread. */ kill(getpid(), SIGINT); @@ -36,7 +33,7 @@ public: ~MonitorFdHup() { - pthread_kill(thread.native_handle(), SIGINT); + pthread_cancel(thread.native_handle()); thread.join(); } }; |