diff options
author | Christopher Faylor <me@cgf.cx> | 2012-06-19 04:31:15 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2012-06-19 04:31:15 +0400 |
commit | af5cd145835d35519af02d0d226f67eb777e4945 (patch) | |
tree | d31ebb964550d4e73c3f0d63d3fa0d1b502e44f4 /winsup/cygwin/fhandler_tape.cc | |
parent | 88fbcb5afd6d7d687387b22509037d99e2aa07ff (diff) |
* cygwait.cc (cancelable_wait): Mimic old cygwait behavior more closely wrt
handling of call_signal_handler.
* cygwait.h (WAIT_CANCELED): Move here and redefine.
(WAIT_SIGNALED): Ditto.
* thread.h (WAIT_CANCELED): Delete.
(WAIT_SIGNALED): Ditto.
Diffstat (limited to 'winsup/cygwin/fhandler_tape.cc')
-rw-r--r-- | winsup/cygwin/fhandler_tape.cc | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc index c394d862d..2e936c3b1 100644 --- a/winsup/cygwin/fhandler_tape.cc +++ b/winsup/cygwin/fhandler_tape.cc @@ -1142,26 +1142,14 @@ mtinfo::initialize () inline bool fhandler_dev_tape::_lock (bool cancelable) { - HANDLE w4[3] = { mt_mtx, signal_arrived, NULL }; - DWORD cnt = 2; - if (cancelable && (w4[2] = pthread::get_cancel_event ()) != NULL) - cnt = 3; /* O_NONBLOCK is only valid in a read or write call. Only those are cancelable. */ DWORD timeout = cancelable && is_nonblocking () ? 0 : INFINITE; restart: - switch (WaitForMultipleObjects (cnt, w4, FALSE, timeout)) + switch (cancelable_wait (mt_mtx, timeout, cw_sig | cw_cancel | cw_cancel_self)) { case WAIT_OBJECT_0: return true; - case WAIT_OBJECT_0 + 1: - if (_my_tls.call_signal_handler ()) - goto restart; - set_errno (EINTR); - return false; - case WAIT_OBJECT_0 + 2: - pthread::static_cancel_self (); - /*NOTREACHED*/ case WAIT_TIMEOUT: set_errno (EAGAIN); return false; |