diff options
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | configure.in | 30 | ||||
| -rw-r--r-- | dbus/dbus-sysdeps-unix.c | 2 | 
3 files changed, 37 insertions, 2 deletions
| @@ -1,5 +1,12 @@  2008-03-04  John (J5) Palmieri  <johnp@redhat.com> +	* fix broken poll on Mac OSX - build patch by Benjamin Reed +	* configure.in: check for OSX's deadlocking poll +	* dbus/dbus-sysdeps-unix.c (_dbus_poll): if we have a broken poll +	  don't use poll + +2008-03-04  John (J5) Palmieri  <johnp@redhat.com> +  	* check if the linker supports a flag instead of just checking for GNU  	  ld  	* configure.in: move AM_PROG_LIBTOOL to the top diff --git a/configure.in b/configure.in index 1caf7d92..24e2431a 100644 --- a/configure.in +++ b/configure.in @@ -590,7 +590,35 @@ AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT_COND, [$have_atomic_inc_cond],  AC_CHECK_LIB(socket,socket)  AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)]) -AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep poll setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit) +AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll) + +#### Check for broken poll; taken from Glib's configure + +AC_MSG_CHECKING([for broken poll]) +AC_RUN_IFELSE([AC_LANG_SOURCE([[ +    #include <stdlib.h> +    #include <fcntl.h> +    #include <poll.h> +    #ifdef HAVE_SYS_POLL_H +    #include <sys/poll.h> +    #endif +    int main(void) { +      struct pollfd fds[1]; +      int fd; +      fd = open("/dev/null", 1); +      fds[0].fd = fd; +      fds[0].events = POLLIN; +      fds[0].revents = 0; +      if (poll(fds, 1, 0) < 0 || (fds[0].revents & POLLNVAL) != 0) { +            exit(1);  /* Does not work for devices -- fail */ +      } +      exit(0); +    }]])], +  [broken_poll=no], +  [broken_poll=yes +   AC_DEFINE(BROKEN_POLL,1,[poll doesn't work on devices])], +  [broken_poll="no (cross compiling)"]) +AC_MSG_RESULT($broken_poll)  AC_MSG_CHECKING(for dirfd)  AC_TRY_LINK([ diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index d9a9030c..19858dd3 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -1843,7 +1843,7 @@ _dbus_poll (DBusPollFD *fds,              int         n_fds,              int         timeout_milliseconds)  { -#ifdef HAVE_POLL +#if defined(HAVE_POLL) && !defined(BROKEN_POLL)    /* This big thing is a constant expression and should get optimized     * out of existence. So it's more robust than a configure check at     * no cost. | 
