Don't include gethrxtime.h or xtime.h.

(NANOSLEEP_BUG_WORKAROUND): Remove.
(xnanosleep): Remove the workaround.
This commit is contained in:
Paul Eggert 2005-03-01 17:25:53 +00:00
parent e9551e2d62
commit 23adaf0bed

View File

@ -33,8 +33,6 @@
#include <time.h>
#include "timespec.h"
#include "gethrxtime.h"
#include "xtime.h"
/* The extra casts work around common compiler bugs. */
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
@ -48,19 +46,6 @@
# define TIME_T_MAX TYPE_MAXIMUM (time_t)
#endif
/* POSIX.1-2001 requires that when a process is suspended, then
resumed, nanosleep (A, B) returns -1, sets errno to EINTR, and sets
*B to the time remaining at the point of resumption. However, some
versions of the Linux kernel incorrectly return the time remaining
at the point of suspension. Work around this bug on GNU/Linux
hosts by computing the remaining time here after nanosleep returns,
rather than by relying on nanosleep's computation. */
#ifdef __linux__
enum { NANOSLEEP_BUG_WORKAROUND = true };
#else
enum { NANOSLEEP_BUG_WORKAROUND = false };
#endif
/* Sleep until the time (call it WAKE_UP_TIME) specified as
SECONDS seconds after the time this function is called.
SECONDS must be non-negative. If SECONDS is so large that
@ -76,19 +61,9 @@ xnanosleep (double seconds)
bool overflow = false;
double ns;
struct timespec ts_sleep;
xtime_t stop = 0;
assert (0 <= seconds);
if (NANOSLEEP_BUG_WORKAROUND)
{
xtime_t now = gethrxtime ();
double increment = XTIME_PRECISION * seconds;
xtime_t incr = increment;
stop = now + incr + (incr < increment);
overflow = (stop < now);
}
/* Separate whole seconds from nanoseconds.
Be careful to detect any overflow. */
ts_sleep.tv_sec = seconds;
@ -134,19 +109,6 @@ xnanosleep (double seconds)
break;
if (errno != EINTR && errno != 0)
return -1;
if (NANOSLEEP_BUG_WORKAROUND)
{
xtime_t now = gethrxtime ();
if (stop <= now)
break;
else
{
xtime_t remaining = stop - now;
ts_sleep.tv_sec = xtime_nonnegative_sec (remaining);
ts_sleep.tv_nsec = xtime_nonnegative_nsec (remaining);
}
}
}
return 0;