summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/signal.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/signal.cc')
-rw-r--r--winsup/cygwin/signal.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
index a23487fc3..c85290712 100644
--- a/winsup/cygwin/signal.cc
+++ b/winsup/cygwin/signal.cc
@@ -74,12 +74,14 @@ sleep (unsigned int seconds)
sigframe thisframe (mainthread);
DWORD ms, start_time, end_time;
+ pthread_testcancel ();
+
ms = seconds * 1000;
start_time = GetTickCount ();
end_time = start_time + (seconds * 1000);
syscall_printf ("sleep (%d)", seconds);
- rc = WaitForSingleObject (signal_arrived, ms);
+ rc = pthread::cancelable_wait (signal_arrived, ms);
DWORD now = GetTickCount ();
if (rc == WAIT_TIMEOUT || now >= end_time)
ms = 0;
@@ -97,9 +99,11 @@ sleep (unsigned int seconds)
extern "C" unsigned int
usleep (unsigned int useconds)
{
+ pthread_testcancel ();
+
sig_dispatch_pending (0);
syscall_printf ("usleep (%d)", useconds);
- WaitForSingleObject (signal_arrived, (useconds + 500) / 1000);
+ pthread::cancelable_wait (signal_arrived, (useconds + 500) / 1000);
syscall_printf ("0 = usleep (%d)", useconds);
return 0;
}