diff options
Diffstat (limited to 'winsup/cygwin/cygwait.cc')
-rw-r--r-- | winsup/cygwin/cygwait.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/winsup/cygwin/cygwait.cc b/winsup/cygwin/cygwait.cc index ee7a705ef..b0476660c 100644 --- a/winsup/cygwin/cygwait.cc +++ b/winsup/cygwin/cygwait.cc @@ -24,7 +24,7 @@ LARGE_INTEGER cw_nowait_storage; DWORD -cancelable_wait (HANDLE object, PLARGE_INTEGER timeout, unsigned mask) +cygwait (HANDLE object, PLARGE_INTEGER timeout, unsigned mask) { DWORD res; DWORD num = 0; @@ -79,10 +79,18 @@ cancelable_wait (HANDLE object, PLARGE_INTEGER timeout, unsigned mask) res = WAIT_TIMEOUT; else if (res != sig_n) /* all set */; - else if (is_cw_sig_eintr) - res = WAIT_SIGNALED; /* caller will deal with signals */ - else if (_my_tls.call_signal_handler ()) - continue; + else + { + _my_tls.lock (); + int sig = _my_tls.sig; + _my_tls.unlock (); + if (!sig) + continue; + if (is_cw_sig_eintr) + res = WAIT_SIGNALED; /* caller will deal with signals */ + else if (_my_tls.call_signal_handler ()) + continue; + } break; } |