diff mbox series

[hurd,commited] mach: Fix bogus negative return

Message ID 20240825013816.414609-1-samuel.thibault@ens-lyon.org
State New
Headers show
Series [hurd,commited] mach: Fix bogus negative return | expand

Commit Message

Samuel Thibault Aug. 25, 2024, 1:38 a.m. UTC
One can be very unlucky to call time_now first just before a second switch,
and mach_msg sleep just a bit more enough for the second time_now call to
count one second too many (or even more if scheduling is really unlucky).

So we have to protect against returning a bogus negative value in such case.
---
 sysdeps/mach/sleep.c | 3 +++
 1 file changed, 3 insertions(+)
diff mbox series

Patch

diff --git a/sysdeps/mach/sleep.c b/sysdeps/mach/sleep.c
index 572be150bc..aa750c13c5 100644
--- a/sysdeps/mach/sleep.c
+++ b/sysdeps/mach/sleep.c
@@ -43,6 +43,9 @@  __sleep (unsigned int seconds)
   after = time_now ();
   __mach_port_destroy (__mach_task_self (), recv);
 
+  if (after - before > seconds)
+    return 0;
+
   return seconds - (after - before);
 }
 weak_alias (__sleep, sleep)