diff options
Diffstat (limited to 'winsup/cygwin/fhandler_tape.cc')
-rw-r--r-- | winsup/cygwin/fhandler_tape.cc | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/winsup/cygwin/fhandler_tape.cc b/winsup/cygwin/fhandler_tape.cc index da2458217..855fd5dfd 100644 --- a/winsup/cygwin/fhandler_tape.cc +++ b/winsup/cygwin/fhandler_tape.cc @@ -1147,26 +1147,13 @@ 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; |