X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fnanosleep.m4;h=1d832a3e5a874d520326cb0dd8243f6101a8ee0a;hb=f664d100c1b6807491654bfdf6d90e2d9fd5b4fd;hp=af346b6cfc6fb23a094edaadc30f6766fb145460;hpb=3ac9552429c5a500717e1d3d129c32f7d0ea37a3;p=gnulib.git diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4 index af346b6cf..1d832a3e5 100644 --- a/m4/nanosleep.m4 +++ b/m4/nanosleep.m4 @@ -1,4 +1,4 @@ -#serial 21 +#serial 23 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; @@ -85,7 +92,7 @@ AC_DEFUN([gl_FUNC_NANOSLEEP], REPLACE_NANOSLEEP=1 if test "$gl_cv_func_nanosleep" = 'no (mishandles large arguments)'; then AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], 1, - [Define to 1 if nanosleep mishandle large arguments.]) + [Define to 1 if nanosleep mishandles large arguments.]) for ac_lib in $LIB_CLOCK_GETTIME; do case " $LIB_NANOSLEEP " in *" $ac_lib "*) ;;