From 6794d36d02839ca8bb1c429f93b1d25b23730527 Mon Sep 17 00:00:00 2001 From: Jean-Frederic Clere Date: Thu, 14 Apr 2011 09:36:14 +0000 Subject: [PATCH] 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 --- modules/proxy/ajp_link.c | 2 +- modules/proxy/mod_proxy_ajp.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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 -- 2.47.2