From e4abcff12f0ab2ec6db42213508eb0e6ccf24624 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sat, 9 Apr 2005 04:52:25 +0000 Subject: [PATCH] (rpl_nanosleep): Include "timespec.h" before macros that might redefine system include files. (siginterrupt) [!HAVE_SIGINTERRUPT]: New macro. (my_usleep): Use NULL rather than (void *) 0. (rpl_nanosleep) [!defined SA_NOCLDSTOP]: Use siginterrupt to specify that system calls should be interrupted. (rpl_nanosleep): Move initialization of suspended closer to call of my_usleep. --- lib/nanosleep.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/nanosleep.c b/lib/nanosleep.c index 2f91c31d83..6d849d7afc 100644 --- a/lib/nanosleep.c +++ b/lib/nanosleep.c @@ -1,5 +1,5 @@ /* Provide a replacement for the POSIX nanosleep function. - Copyright (C) 1999, 2000, 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2002, 2004, 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,6 +34,8 @@ # include #endif +#include "timespec.h" + /* Some systems (MSDOS) don't have SIGCONT. Using SIGTERM here turns the signal-handling code below into a no-op on such systems. */ @@ -41,7 +43,9 @@ # define SIGCONT SIGTERM #endif -#include "timespec.h" +#if ! HAVE_SIGINTERRUPT +# define siginterrupt(sig, flag) /* empty */ +#endif static sig_atomic_t volatile suspended; @@ -66,7 +70,7 @@ my_usleep (const struct timespec *ts_delay) tv_delay.tv_sec++; tv_delay.tv_usec = 0; } - select (0, (void *) 0, (void *) 0, (void *) 0, &tv_delay); + select (0, NULL, NULL, NULL, &tv_delay); } /* FIXME: comment */ @@ -77,16 +81,11 @@ rpl_nanosleep (const struct timespec *requested_delay, { static bool initialized; -#ifdef SA_NOCLDSTOP - struct sigaction oldact, newact; -#endif - - suspended = 0; - /* set up sig handler */ if (! initialized) { #ifdef SA_NOCLDSTOP + struct sigaction oldact, newact; newact.sa_handler = sighandler; sigemptyset (&newact.sa_mask); newact.sa_flags = 0; @@ -96,11 +95,16 @@ rpl_nanosleep (const struct timespec *requested_delay, sigaction (SIGCONT, &newact, NULL); #else if (signal (SIGCONT, SIG_IGN) != SIG_IGN) - signal (SIGCONT, sighandler); + { + signal (SIGCONT, sighandler); + siginterrupt (SIGCONT, 1); + } #endif initialized = true; } + suspended = 0; + my_usleep (requested_delay); if (suspended) -- 2.47.3