Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Duda <deo@logos-m.ru>2000-09-16 17:19:52 +0400
committerEgor Duda <deo@logos-m.ru>2000-09-16 17:19:52 +0400
commita12b2260d0e812945b4463a9c65e1d227d10b0e0 (patch)
treeb60680e4d857a0fca7fc5f1f9ccb56263ef57267 /winsup/cygwin/signal.cc
parentf9f2ed0e2b3c889697ed11afba8a681a91e4d800 (diff)
* signal.cc (sleep): If interrupted by signal, return the
requested time minus the time actually slept.
Diffstat (limited to 'winsup/cygwin/signal.cc')
-rw-r--r--winsup/cygwin/signal.cc19
1 files changed, 11 insertions, 8 deletions
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
index 00322018e..f1b4dca92 100644
--- a/winsup/cygwin/signal.cc
+++ b/winsup/cygwin/signal.cc
@@ -44,19 +44,22 @@ extern "C"
unsigned int
sleep (unsigned int seconds)
{
- int res;
+ int rc;
unsigned start_time;
+ unsigned int res;
start_time = GetTickCount ();
syscall_printf ("sleep (%d)", seconds);
- res = WaitForSingleObject (signal_arrived, seconds * 1000);
- if (res == WAIT_TIMEOUT)
- {
- syscall_printf ("0 = sleep (%d)", seconds);
- return 0;
- }
- return (GetTickCount () - start_time)/1000;
+ rc = WaitForSingleObject (signal_arrived, seconds * 1000);
+ if (rc == WAIT_TIMEOUT)
+ res = 0;
+ else
+ res = seconds - (GetTickCount () - start_time)/1000;
+
+ syscall_printf ("%d = sleep (%d)", res, seconds);
+
+ return res;
}
extern "C"