You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2014/12/06 15:33:52 UTC
svn commit: r1643537 - in /httpd/httpd/trunk: CHANGES
docs/log-message-tags/next-number modules/proxy/mod_proxy_ajp.c
Author: ylavic
Date: Sat Dec 6 14:33:52 2014
New Revision: 1643537
URL: http://svn.apache.org/r1643537
Log:
* mod_proxy_ajp: Fix client connection errors handling and logged status
when it occurs. PR 56823.
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/docs/log-message-tags/next-number
httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1643537&r1=1643536&r2=1643537&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Sat Dec 6 14:33:52 2014
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mod_proxy_ajp: Fix client connection errors handling and logged status
+ when it occurs. PR 56823. [Yann Ylavic]
+
*) ap_expr: Add filemod function for checking file modification dates
[Daniel Gruno]
Modified: httpd/httpd/trunk/docs/log-message-tags/next-number
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/log-message-tags/next-number?rev=1643537&r1=1643536&r2=1643537&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/log-message-tags/next-number (original)
+++ httpd/httpd/trunk/docs/log-message-tags/next-number Sat Dec 6 14:33:52 2014
@@ -1 +1 @@
-2821
+2823
Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c?rev=1643537&r1=1643536&r2=1643537&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_ajp.c Sat Dec 6 14:33:52 2014
@@ -186,7 +186,7 @@ static int ap_proxy_ajp_request(apr_pool
int data_sent = 0;
int request_ended = 0;
int headers_sent = 0;
- int rv = 0;
+ int rv = OK;
apr_int32_t conn_poll_fd;
apr_pollfd_t *conn_poll;
proxy_server_conf *psf =
@@ -394,6 +394,9 @@ static int ap_proxy_ajp_request(apr_pool
if (status != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, APLOGNO(00880)
"ap_get_brigade failed");
+ if (APR_STATUS_IS_TIMEUP(status)) {
+ rv = HTTP_REQUEST_TIME_OUT;
+ }
output_failed = 1;
break;
}
@@ -404,6 +407,7 @@ static int ap_proxy_ajp_request(apr_pool
if (status != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, APLOGNO(00881)
"apr_brigade_flatten failed");
+ rv = HTTP_INTERNAL_SERVER_ERROR;
output_failed = 1;
break;
}
@@ -559,15 +563,19 @@ static int ap_proxy_ajp_request(apr_pool
/*
* If connection has been aborted by client: Stop working.
- * Nevertheless, we regard our operation so far as a success:
- * So reset output_failed to 0 and set result to CMD_AJP13_END_RESPONSE
- * But: Close this connection to the backend.
+ * Pretend we are done (data_sent) to avoid further processing.
*/
if (r->connection->aborted) {
- conn->close = 1;
- output_failed = 0;
- result = CMD_AJP13_END_RESPONSE;
- request_ended = 1;
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(02821)
+ "client connection aborted");
+ /* no response yet (or ever), set status for access log */
+ if (!headers_sent) {
+ r->status = HTTP_BAD_REQUEST;
+ }
+ /* return DONE */
+ output_failed = 1;
+ data_sent = 1;
+ break;
}
/*
@@ -677,6 +685,14 @@ static int ap_proxy_ajp_request(apr_pool
}
}
}
+ else if (output_failed) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02822)
+ "dialog with client %pI failed",
+ r->connection->client_addr);
+ if (rv == OK) {
+ rv = HTTP_BAD_REQUEST;
+ }
+ }
/*
* Ensure that we sent an EOS bucket thru the filter chain, if we already
@@ -684,7 +700,8 @@ static int ap_proxy_ajp_request(apr_pool
* one to the brigade already (no longer making it empty). So we should
* not do this in this case.
*/
- if (data_sent && !r->eos_sent && APR_BRIGADE_EMPTY(output_brigade)) {
+ if (data_sent && !r->eos_sent && !r->connection->aborted
+ && APR_BRIGADE_EMPTY(output_brigade)) {
e = apr_bucket_eos_create(r->connection->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(output_brigade, e);
}
Re: svn commit: r1643537 - in /httpd/httpd/trunk: CHANGES
docs/log-message-tags/next-number modules/proxy/mod_proxy_ajp.c
Posted by Yann Ylavic <yl...@gmail.com>.
On Sat, Dec 6, 2014 at 3:44 PM, Eric Covener <co...@gmail.com> wrote:
> On Sat, Dec 6, 2014 at 9:33 AM, <yl...@apache.org> wrote:
>> + else if (output_failed) {
>> + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02822)
>> + "dialog with client %pI failed",
>> + r->connection->client_addr);
>> + if (rv == OK) {
>> + rv = HTTP_BAD_REQUEST;
>> + }
>> + }
>
> From memory/spot-checking, I think this would make c->aborted errors
> noisier when they happen to be handled by proxy_ajp.
Agreed, fixed in r1643543.
Thanks,
Yann.
Re: svn commit: r1643537 - in /httpd/httpd/trunk: CHANGES
docs/log-message-tags/next-number modules/proxy/mod_proxy_ajp.c
Posted by Eric Covener <co...@gmail.com>.
On Sat, Dec 6, 2014 at 9:33 AM, <yl...@apache.org> wrote:
> + else if (output_failed) {
> + ap_log_rerror(APLOG_MARK, APLOG_ERR, status, r, APLOGNO(02822)
> + "dialog with client %pI failed",
> + r->connection->client_addr);
> + if (rv == OK) {
> + rv = HTTP_BAD_REQUEST;
> + }
> + }
>From memory/spot-checking, I think this would make c->aborted errors
noisier when they happen to be handled by proxy_ajp.
--
Eric Covener
covener@gmail.com