summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/cygwait.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-02-23 13:56:01 +0000
committerCorinna Vinschen <corinna@vinschen.de>2015-02-23 13:56:01 +0000
commit093fe9b598738ca1e680b4e061834bc53c9a75a2 (patch)
tree3050ce674e9919b659b5e7f5c38e01a3d6633135 /winsup/cygwin/cygwait.cc
parentb6e4adaaf1a4248907844a32fa300ee95e71bd3c (diff)
downloadcygnal-093fe9b598738ca1e680b4e061834bc53c9a75a2.tar.gz
cygnal-093fe9b598738ca1e680b4e061834bc53c9a75a2.tar.bz2
cygnal-093fe9b598738ca1e680b4e061834bc53c9a75a2.zip
* cygwait.h (enum cw_wait_mask): Add cw_sig_restart. Add comments
to explain the meaning of the possible values. * cygwait.cc (is_cw_sig_restart): Define. (is_cw_sig_handle): Check for cw_sig_restart as well. (cygwait): Restart always if cw_sig_restart is set. * thread.cc (pthread::join): Call cygwait with cw_sig_restart flag to avoid having to handle signals at all.
Diffstat (limited to 'winsup/cygwin/cygwait.cc')
-rw-r--r--winsup/cygwin/cygwait.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/winsup/cygwin/cygwait.cc b/winsup/cygwin/cygwait.cc
index 4d2b8a745..71d30d164 100644
--- a/winsup/cygwin/cygwait.cc
+++ b/winsup/cygwin/cygwait.cc
@@ -18,8 +18,10 @@
#define is_cw_sig (mask & cw_sig)
#define is_cw_sig_eintr (mask & cw_sig_eintr)
#define is_cw_sig_cont (mask & cw_sig_cont)
+#define is_cw_sig_restart (mask & cw_sig_restart)
-#define is_cw_sig_handle (mask & (cw_sig | cw_sig_eintr | cw_sig_cont))
+#define is_cw_sig_handle (mask & (cw_sig | cw_sig_eintr \
+ | cw_sig_cont | cw_sig_restart))
LARGE_INTEGER cw_nowait_storage;
@@ -88,7 +90,7 @@ cygwait (HANDLE object, PLARGE_INTEGER timeout, unsigned mask)
continue;
if (is_cw_sig_eintr || (is_cw_sig_cont && sig == SIGCONT))
;
- else if (_my_tls.call_signal_handler ())
+ else if (_my_tls.call_signal_handler () || is_cw_sig_restart)
continue;
res = WAIT_SIGNALED; /* caller will deal with signals */
}