Hi,

I think nanosleep() is broken in that it returns elapsed time, not
remaining time.  I worked out this fix, completely untested.  If
someone wants to test and verify this fix, please have a go.  To
properly test it you have to set up an ALARM signal and interrupt the
sleep I guess.

Thanks,
Marcus

2005-01-30  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * sysdeps/mach/nanosleep.c (__nanosleep): Calculate remaining
        time, not elapsed time.

--- nanosleep.c.org     2005-01-30 23:12:05.000000000 +0100
+++ nanosleep.c 2005-01-30 23:12:43.000000000 +0100
@@ -44,8 +44,16 @@ __nanosleep (const struct timespec *requ
 
   if (remaining)
     {
-      timersub (&after, &before, &after);
-      TIMEVAL_TO_TIMESPEC (&after, remaining);
+      struct timeval elapsed;
+      struct timeval remain;
+
+      timersub (&after, &before, &elapsed);
+      if (timercmp (&requested_time, &elapsed, <))
+        timerclear (&remain);
+      else
+        timersub (&requested_time, &elapsed, &remain);
+
+      TIMEVAL_TO_TIMESPEC (&remain, remaining);
     }
 
   return 0;



_______________________________________________
Bug-hurd mailing list
Bug-hurd@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-hurd

Reply via email to