about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-07-24T09·47+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-07-24T09·47+0200
commit0fae20c36226c8596dd9676c354ca957808ea3d1 (patch)
tree193322786152b4c7395d884fbbb51515935e5528 /src
parentaa1560ca079148f5656cbec0d8057d551cb571ff (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.hh7
1 files changed, 2 insertions, 5 deletions
diff --git a/src/libutil/monitor-fd.hh b/src/libutil/monitor-fd.hh
index 6f7f9792c838..72d23fb6934c 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();
     }
 };