From: Jean-Frederic Clere Date: Thu, 14 Apr 2011 09:36:14 +0000 (+0000) Subject: try to prevent a single long request marking a worker in error. X-Git-Tag: 2.3.12~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6794d36d02839ca8bb1c429f93b1d25b23730527;p=thirdparty%2Fapache%2Fhttpd.git try to prevent a single long request marking a worker in error. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1092076 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/ajp_link.c b/modules/proxy/ajp_link.c index 56b7c0eac25..7b995999823 100644 --- a/modules/proxy/ajp_link.c +++ b/modules/proxy/ajp_link.c @@ -84,7 +84,7 @@ apr_status_t ajp_ilink_receive(apr_socket_t *sock, ajp_msg_t *msg) if (status != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, status, NULL, "ajp_ilink_receive() can't receive header"); - return AJP_ENO_HEADER; + return (status == APR_TIMEUP ? APR_TIMEUP : AJP_ENO_HEADER); } status = ajp_msg_check_header(msg, &blen); diff --git a/modules/proxy/mod_proxy_ajp.c b/modules/proxy/mod_proxy_ajp.c index af78c60e923..a54e03ea64d 100644 --- a/modules/proxy/mod_proxy_ajp.c +++ b/modules/proxy/mod_proxy_ajp.c @@ -336,6 +336,15 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, "proxy: read response failed from %pI (%s)", conn->worker->cp->addr, conn->worker->s->hostname); + + /* If we had a successful cping/cpong and then a timeout + * we assume it is a request that cause a back-end timeout, + * but doesn't affect the whole worker. + */ + if (status == APR_TIMEUP && conn->worker->ping_timeout_set) { + return HTTP_GATEWAY_TIME_OUT; + } + /* * This is only non fatal when we have not sent (parts) of a possible * request body so far (we do not store it and thus cannot send it