X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fnanosleep.m4;h=a3a6814042ec6909d8dc9887f096d4f7d43cc42c;hb=8e74296348d2d5197a301ebf8c8b1e4342088ad3;hp=af346b6cfc6fb23a094edaadc30f6766fb145460;hpb=3ac9552429c5a500717e1d3d129c32f7d0ea37a3;p=gnulib.git diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4 index af346b6cf..a3a681404 100644 --- a/m4/nanosleep.m4 +++ b/m4/nanosleep.m4 @@ -1,4 +1,4 @@ -#serial 21 +#serial 22 dnl From Jim Meyering. dnl Check for the nanosleep function. @@ -17,6 +17,7 @@ AC_DEFUN([gl_FUNC_NANOSLEEP], dnl Persuade glibc and Solaris to declare nanosleep. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) AC_REQUIRE([gl_CLOCK_TIME]) AC_CHECK_HEADERS_ONCE(sys/time.h) @@ -60,14 +61,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;