From: Paul Eggert Date: Sat, 24 Feb 2007 10:01:49 +0000 (+0000) Subject: * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Check for a nanosleep that X-Git-Tag: cvs-readonly~991 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=a63c573321102e86348561ca5440be8b57c02672;p=gnulib.git * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Check for a nanosleep that loops on small arguments. This attempts to avoid the problem Bruno Haible reported for AIX 4.3.2 in . --- diff --git a/ChangeLog b/ChangeLog index 98e3f4523..45b1fd94e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-02-24 Paul Eggert + + * m4/nanosleep.m4 (gl_FUNC_NANOSLEEP): Check for a nanosleep that + loops on small arguments. This attempts to avoid the problem + Bruno Haible reported for AIX 4.3.2 in + . + 2007-02-23 Bruno Haible * m4/perl.m4 (gl_PERL): Require version 5.005, not 5.003. diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4 index af346b6cf..a03c37cd8 100644 --- a/m4/nanosleep.m4 +++ b/m4/nanosleep.m4 @@ -60,14 +60,20 @@ AC_DEFUN([gl_FUNC_NANOSLEEP], static struct timespec ts_sleep; static struct timespec ts_remaining; static struct sigaction act; + if (! nanosleep) + return 1; act.sa_handler = check_for_SIGALRM; - sigemptyset (&act.sa_mask); + sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); + ts_sleep.tv_sec = 0; + ts_sleep.tv_nsec = 1; + alarm (1); + if (nanosleep (&ts_sleep, NULL) != 0) + return 1; ts_sleep.tv_sec = TYPE_MAXIMUM (time_t); ts_sleep.tv_nsec = 999999999; alarm (1); if (nanosleep (&ts_sleep, &ts_remaining) == -1 && errno == EINTR - && nanosleep && TYPE_MAXIMUM (time_t) - 10 < ts_remaining.tv_sec) return 0; return 119;