On Sun, May 8, 2016 at 8:53 AM, <[email protected]> wrote:
> Author: rjung
> Date: Sun May 8 13:53:37 2016
> New Revision: 1742822
>
> URL: http://svn.apache.org/viewvc?rev=1742822&view=rev
> Log:
> Fix yet another case where we clobber the
> server-status request info when a timeout happens.
>
> Modified:
> httpd/httpd/trunk/modules/http/http_core.c
>
> Modified: httpd/httpd/trunk/modules/http/http_core.c
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/http_core.c?rev=1742822&r1=1742821&r2=1742822&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/modules/http/http_core.c (original)
> +++ httpd/httpd/trunk/modules/http/http_core.c Sun May 8 13:53:37 2016
> @@ -148,7 +148,8 @@ static int ap_process_http_async_connect
> c->keepalive = AP_CONN_UNKNOWN;
> /* process the request if it was read without error */
>
> - ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
> + ap_update_child_status(c->sbh, SERVER_BUSY_WRITE,
> + r->the_request ? r : NULL);
> if (r->status == HTTP_OK) {
> cs->state = CONN_STATE_HANDLER;
> ap_process_async_request(r);
> @@ -203,7 +204,8 @@ static int ap_process_http_sync_connecti
> c->keepalive = AP_CONN_UNKNOWN;
> /* process the request if it was read without error */
>
> - ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
> + ap_update_child_status(c->sbh, SERVER_BUSY_WRITE,
> + r->the_request ? r : NULL);
> if (r->status == HTTP_OK) {
> if (cs)
> cs->state = CONN_STATE_HANDLER;
>
I'd explained in another thread this week why this patch is invalid,
and I've gone ahead and reverted.
We agreed there is a defect here, what about the attached fix?
Index: modules/http/http_core.c
===================================================================
--- modules/http/http_core.c (revision 1743511)
+++ modules/http/http_core.c (working copy)
@@ -148,9 +148,9 @@
c->keepalive = AP_CONN_UNKNOWN;
/* process the request if it was read without error */
- ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
if (r->status == HTTP_OK) {
cs->state = CONN_STATE_HANDLER;
+ ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
ap_process_async_request(r);
/* After the call to ap_process_request, the
* request pool may have been deleted. We set
@@ -203,10 +203,10 @@
c->keepalive = AP_CONN_UNKNOWN;
/* process the request if it was read without error */
- ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
if (r->status == HTTP_OK) {
if (cs)
cs->state = CONN_STATE_HANDLER;
+ ap_update_child_status(c->sbh, SERVER_BUSY_WRITE, r);
ap_process_request(r);
/* After the call to ap_process_request, the
* request pool will have been deleted. We set