On Friday 12 of April 2013, Eric Covener wrote:
> > diff -ur httpd-2.4.4.org/server/mpm_unix.c httpd-2.4.4/server/mpm_unix.c
> > --- httpd-2.4.4.org/server/mpm_unix.c 2012-07-03 21:38:58.000000000
> > +0200 +++ httpd-2.4.4/server/mpm_unix.c 2013-04-12
> > 09:14:58.282929959 +0200 @@ -604,7 +604,17 @@
> >
> > len = strlen(data);
> >
> > }
> >
> > - apr_socket_send(sock, data, &len);
> > + rv = apr_socket_send(sock, data, &len);
> > + if (rv == APR_SUCCESS) {
> > + char *buffer[10]; // dummy buffer to see if child is alive
> > +
> > + len = sizeof(buffer);
> > + rv = apr_socket_recv(sock, buffer, &len);
> > + if (rv != APR_SUCCESS) {
> > + ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, ap_server_conf,
> > APLOGNO(00057) + "receiving response to dummy
> > data to listener on %pI", lp->bind_addr); + }
> > + }
> >
> > apr_socket_close(sock);
> > apr_pool_destroy(p);
End of this is:
apr_socket_close(sock);
apr_pool_destroy(p);
return rv;
>
> Interesting analysis, I'm confused on how the patch helps though if it
> doesn't actually do anything different when there is no reply (which
> is more what I expected from the bullets)
It returns error in rv which is propagated up to ap_mpm_pod_killpg
which does
for (i = 0; i < num && rv == APR_SUCCESS; i++) {
rv = dummy_connection(pod);
}
and on error will break the loop and stop doing dummy connections as there are
no children anyway. graceful restart then can proceed without a delay.
--
Arkadiusz Miśkiewicz, arekm / maven.pl