# HG changeset patch # User Paul Eggert # Date 1191885972 25200 # Node ID ac5b4a469386b75c2dbf699bff443ce7b6c0a754 # Parent be88e4511678a31700f88dab80b6702ea5d0ab07 * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior when avoiding problems with integer overflow. Use a portable test instead. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-10-08 Paul Eggert + + * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior + when avoiding problems with integer overflow. Use a portable test + instead. + 2007-10-08 Simon Josefsson * modules/dummy (License): Change to LGPLv2+. diff --git a/lib/xnanosleep.c b/lib/xnanosleep.c --- a/lib/xnanosleep.c +++ b/lib/xnanosleep.c @@ -72,15 +72,13 @@ /* Normalize the interval length. nanosleep requires this. */ if (BILLION <= ts_sleep.tv_nsec) { - /* Declare "volatile" so that gcc-4.3.0 doesn't optimize away - the overflow test. */ - volatile time_t t = ts_sleep.tv_sec + 1; - - /* Detect integer overflow. */ - overflow |= (t < ts_sleep.tv_sec); - - ts_sleep.tv_sec = t; - ts_sleep.tv_nsec -= BILLION; + if (ts_sleep.tv_sec == TIME_T_MAX) + overflow = true; + else + { + ts_sleep.tv_sec++; + ts_sleep.tv_nsec -= BILLION; + } } for (;;)