diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2005-04-09 04:52:25 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2005-04-09 04:52:25 +0000 |
commit | e4abcff12f0ab2ec6db42213508eb0e6ccf24624 (patch) | |
tree | d3671a3d59e150fdf35064bf541c009cb2a40b63 /lib | |
parent | a3d3cf669ce3a225c970582e61dc26abdfe46578 (diff) | |
download | coreutils-e4abcff12f0ab2ec6db42213508eb0e6ccf24624.tar.xz |
(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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/nanosleep.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/lib/nanosleep.c b/lib/nanosleep.c index 2f91c31d8..6d849d7af 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 <unistd.h> #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) |