summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_tape.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2012-06-19 00:31:15 +0000
committerChristopher Faylor <me@cgf.cx>2012-06-19 00:31:15 +0000
commitaf5cd145835d35519af02d0d226f67eb777e4945 (patch)
treed31ebb964550d4e73c3f0d63d3fa0d1b502e44f4 /winsup/cygwin/fhandler_tape.cc
parent88fbcb5afd6d7d687387b22509037d99e2aa07ff (diff)
downloadcygnal-af5cd145835d35519af02d0d226f67eb777e4945.tar.gz
cygnal-af5cd145835d35519af02d0d226f67eb777e4945.tar.bz2
cygnal-af5cd145835d35519af02d0d226f67eb777e4945.zip
* 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.cc14
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;