From 36fa078f51a43eef774eca7d7e66455d83d5ca07 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 8 Oct 2007 16:26:12 -0700 Subject: [PATCH] * lib/xnanosleep.c (xnanosleep): Don't assume GCC 4.3.0 behavior when avoiding problems with integer overflow. Use a portable test instead. --- ChangeLog | 6 ++++++ lib/xnanosleep.c | 16 +++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index a00164578..a8c5a9ec3 100644 --- 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 index 22bd53a95..317e40ade 100644 --- a/lib/xnanosleep.c +++ b/lib/xnanosleep.c @@ -72,15 +72,13 @@ xnanosleep (double seconds) /* 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 (;;) -- 2.11.0