From e9b9c97c33c52e9eafaf6bf6d682e43ecfa3aea7 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 22 Oct 2010 15:46:04 +0200 Subject: sleep: tiny code shrink ...or rather, it WILL BE code shrink when gcc become clever enough to not emit a second, useless XORing of ebx: 31 db xor %ebx,%ebx 85 c0 test %eax,%eax 74 11 je 73 <__GI_sleep+0x73> 31 db xor %ebx,%ebx <=== ?! Signed-off-by: Denys Vlasenko --- libc/unistd/sleep.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libc/unistd/sleep.c b/libc/unistd/sleep.c index 438f5e282..6a237e3f9 100644 --- a/libc/unistd/sleep.c +++ b/libc/unistd/sleep.c @@ -82,6 +82,10 @@ unsigned int sleep (unsigned int seconds) /* Run nanosleep, with SIGCHLD blocked if SIGCHLD is SIG_IGNed. */ result = nanosleep (&ts, &ts); + if (result != 0) { + /* Got EINTR. Return remaining time. */ + result = (unsigned int) ts.tv_sec + (ts.tv_nsec >= 500000000L); + } if (!__sigismember (&set, SIGCHLD)) { /* We did block SIGCHLD, and old mask had no SIGCHLD bit. @@ -91,10 +95,6 @@ unsigned int sleep (unsigned int seconds) sigprocmask (SIG_SETMASK, &set, NULL); /* never fails */ } - if (result != 0) - /* Round remaining time. */ - result = (unsigned int) ts.tv_sec + (ts.tv_nsec >= 500000000L); - return result; } #endif -- cgit v1.2.3