From f071795d80255755c4f3d2bdc6c55e67753b52b9 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 25 Aug 2024 03:35:29 +0200 Subject: [PATCH] mach: Fix bogus negative return 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 --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)