On Tue, Nov 26, 2013 at 4:49 PM, olli hauer <oha...@gmx.de> wrote: > On 2013-11-26 22:01, Rainer Jung wrote: > > On 26.11.2013 15:58, olli hauer wrote: > >> On 2013-11-25 23:25, Jeff Trawick wrote: > > > >>> See if this brings any happiness: > >>> > >>> Index: network_io/unix/sockets.c > >>> =================================================================== > >>> --- network_io/unix/sockets.c (revision 1545394) > >>> +++ network_io/unix/sockets.c (working copy) > >>> @@ -273,7 +273,7 @@ > >>> #endif /* TCP_NODELAY_INHERITED */ > >>> #if APR_O_NONBLOCK_INHERITED > >>> if (apr_is_option_set(sock, APR_SO_NONBLOCK) == 1) { > >>> - apr_set_option(*new, APR_SO_NONBLOCK, 1); > >>> + /* apr_set_option(*new, APR_SO_NONBLOCK, 1); */ > >>> } > >>> #endif /* APR_O_NONBLOCK_INHERITED */ > >> > >> > >> I can confirm after removing the line in apr-1.5.0 apache24 no longer > hangs. > >> (tested with apache-2.4.6 / 2.4.7) > >> > >> I seen now why this is triggered by comparing apr.h after `./configure', > >> > >>> grep APR_O_NONBLOCK_INHERITED work/apr-1.4.8/include/apr.h > >> ./work/apr-1.4.8/include/apr.h:#define APR_O_NONBLOCK_INHERITED 0 > >> > >>> grep APR_O_NONBLOCK_INHERITED work/apr-1.5.0/include/apr.h > >> work/apr-1.5.0/include/apr.h:#define APR_O_NONBLOCK_INHERITED 1 > >> > >> > >>> There are some APR 1.5 autoconf changes to consider at > >>> > http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/build/apr_network.m4?view=log > >> > >> OK, backing out the changes from r1502805 seems to do the trick on 10b3 > >> http://svn.apache.org/viewvc?view=revision&revision=1502805 > >> > >>> grep APR_O_NONBLOCK_INHERITED work/apr-1.5.0/include/apr.h > >> work/apr-1.5.0/include/apr.h:#define APR_O_NONBLOCK_INHERITED 0 > > > > But acking out that change simply breaks the configure test on any > > platform, because the resulting detection program no longer compiles. > > > > So the real culprit, is that the detection isn't doing the right thing. > > > > The test was changed before the compilation fix in the following > revision: > > > > > http://svn.apache.org/viewvc/apr/apr/branches/1.5.x/build/apr_network.m4?r1=887002&r2=1449569&pathrev=1502805&diff_format=h > > > > That was due to the fact that I saw the test providing unreliable > > results on a busy machine. > > > > So the question to me is: is the O_NONBLOCK setting inherited from a > > listening socket on FreeBSD 10 - that's what the test tries to detect - > > and how can we fix this feature test? > > > > Or: is the test correct, but it previously failed for systems, where the > > Apache or APR code does not do the right thing if the test would have > > succeeded. > > > > Good questions ... > > Apache is running fine even with "APR_O_NONBLOCK_INHERITED 1" in apr.h, > except > - V4 mapping is enabled and in httpd.conf a Listen directive without IP > address e.g. "Listen 80" is given and then only if requested from a > remote host. > ( a simple echo "GET /" | nc $lo0-address 80 is working ) >
Here's what I saw yesterday: * This simple echo | nc request does not trigger the hang, which occurs when httpd tries a non-blocking read (which really blocks) on a connection with keep-alive enabled. * The hang occurs over loopback or LAN, with IPv4 or IPv6 addresses. > > > -- > Regards, > olli > -- Born in Roswell... married an alien... http://emptyhammock.com/