annotate m4/usleep.m4 @ 16869:38e6d30d7e4d

poll/select: prevent busy-waiting 2012-05-21 Paolo Bonzini <bonzini@gnu.org> poll/select: prevent busy-waiting. SwitchToThread() only gives away the rest of the current time slice to another thread in the current process. So if the thread that feeds the file decscriptor we're polling is not in the current process, we get busy-waiting. * lib/poll.c: Use SleepEx(1, TRUE) instead of SwitchToThread(). Patch from Theodore Leblond. * lib/select.c: Split polling out of the loop that sets the output fd_sets. Check for zero result and loop if the wait timeout is infinite.
author Paolo Bonzini <bonzini@gnu.org>
date Mon, 21 May 2012 09:52:42 +0200
parents b187fc49964b
children e542fd46ad6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16811
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
1 # usleep.m4 serial 3
16201
8250f2777afc maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents: 15135
diff changeset
2 dnl Copyright (C) 2009-2012 Free Software Foundation, Inc.
12315
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
3 dnl This file is free software; the Free Software Foundation
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
4 dnl gives unlimited permission to copy and/or distribute it,
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
5 dnl with or without modifications, as long as this notice is preserved.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
6
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
7 dnl This macro intentionally does not check for select or nanosleep;
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
8 dnl both of those modules can require external libraries.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
9 AC_DEFUN([gl_FUNC_USLEEP],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
10 [
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
11 AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
12 dnl usleep was required in POSIX 2001, but dropped as obsolete in
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
13 dnl POSIX 2008; therefore, it is not always exposed in headers.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
14 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
16811
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
15 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
12315
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
16 AC_CHECK_FUNCS_ONCE([usleep])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
17 AC_CHECK_TYPE([useconds_t], [],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
18 [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
19 type if <sys/types.h> lacks this type.])])
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
20 if test $ac_cv_func_usleep = no; then
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
21 HAVE_USLEEP=0
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
22 else
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
23 dnl POSIX allows implementations to reject arguments larger than
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
24 dnl 999999, but GNU guarantees it will work.
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
25 AC_CACHE_CHECK([whether usleep allows large arguments],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
26 [gl_cv_func_usleep_works],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
27 [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
28 #include <unistd.h>
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
29 ]], [[return !!usleep (1000000);]])],
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
30 [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no],
16811
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
31 [case "$host_os" in
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
32 # Guess yes on glibc systems.
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
33 *-gnu*) gl_cv_func_usleep_works="guessing yes" ;;
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
34 # If we don't know, assume the worst.
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
35 *) gl_cv_func_usleep_works="guessing no" ;;
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
36 esac
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
37 ])])
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
38 case "$gl_cv_func_usleep_works" in
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
39 *yes) ;;
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
40 *)
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
41 REPLACE_USLEEP=1
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
42 ;;
b187fc49964b Avoid "guessing no" guesses when cross-compiling to glibc systems.
Bruno Haible <bruno@clisp.org>
parents: 16201
diff changeset
43 esac
12315
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
44 fi
8cb02ee162a1 usleep: new module
Eric Blake <ebb9@byu.net>
parents:
diff changeset
45 ])