You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by rj...@apache.org on 2013/02/25 01:20:27 UTC
svn commit: r1449572 - in /apr/apr/branches/0.9.x: ./ CHANGES
build/apr_network.m4
Author: rjung
Date: Mon Feb 25 00:20:27 2013
New Revision: 1449572
URL: http://svn.apache.org/r1449572
Log:
Fix detection of O_NONBLOCK inheritance.
The original test failed occasionally on a busy
FreeBSD server when accept() returned EAGAIN.
Backport of r1449568 from trunk resp. r1449569
from 1.5.x resp. r1449570 from 1.4.x resp.
r1449571 from 1.3.x.
Modified:
apr/apr/branches/0.9.x/ (props changed)
apr/apr/branches/0.9.x/CHANGES
apr/apr/branches/0.9.x/build/apr_network.m4
Propchange: apr/apr/branches/0.9.x/
------------------------------------------------------------------------------
Merged /apr/apr/trunk:r1449568
Modified: apr/apr/branches/0.9.x/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/branches/0.9.x/CHANGES?rev=1449572&r1=1449571&r2=1449572&view=diff
==============================================================================
--- apr/apr/branches/0.9.x/CHANGES [utf-8] (original)
+++ apr/apr/branches/0.9.x/CHANGES [utf-8] Mon Feb 25 00:20:27 2013
@@ -1,6 +1,10 @@
- -*- coding: utf-8 -*-
+
+-*- coding: utf-8 -*-
Changes with APR 0.9.21
+ *) configure: Fix detection of O_NONBLOCK inheritance on busy
+ systems. [Rainer Jung]
+
*) apr_time_exp_*() on Windows: Fix error in the tm_yday field of
apr_time_exp_t for times within leap years. PR 53175.
[Jeff Trawick]
Modified: apr/apr/branches/0.9.x/build/apr_network.m4
URL: http://svn.apache.org/viewvc/apr/apr/branches/0.9.x/build/apr_network.m4?rev=1449572&r1=1449571&r2=1449572&view=diff
==============================================================================
--- apr/apr/branches/0.9.x/build/apr_network.m4 (original)
+++ apr/apr/branches/0.9.x/build/apr_network.m4 Mon Feb 25 00:20:27 2013
@@ -354,13 +354,24 @@ dnl
AC_DEFUN(APR_CHECK_O_NONBLOCK_INHERITED,[
AC_CACHE_CHECK(if O_NONBLOCK setting is inherited from listening sockets, ac_cv_o_nonblock_inherited,[
AC_TRY_RUN( [
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STDIO_H
#include <stdio.h>
+#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -431,6 +442,26 @@ int main(void) {
exit(1);
}
sa_len = sizeof sa;
+ /* 1 second select timeout */
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+ /* Set up fd set */
+ FD_ZERO(&fds);
+ FD_SET(listen_s, &fds);
+ /* Wait for socket to become readable */
+ rc = select(listen_s + 1, &fds, NULL, NULL, &tv);
+ if (rc < 0) {
+ perror("select");
+ exit(1);
+ }
+ if (rc == 0) {
+ fprintf(stderr, "Socket failed to become readable (timeout)\n");
+ exit(1);
+ }
+ if (!FD_ISSET(listen_s, &fds)) {
+ fprintf(stderr, "Socket failed to become readable (selected another fd)\n");
+ exit(1);
+ }
connected_s = accept(listen_s, (struct sockaddr *)&sa, &sa_len);
if (connected_s < 0) {
perror("accept");