From: Ruediger Pluem Date: Sun, 11 Dec 2005 01:28:13 +0000 (+0000) Subject: * revert r355823 and r355837 X-Git-Tag: 2.3.0~2675 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06c6bde4c63a9011eda84f53124887c0e07607b8;p=thirdparty%2Fapache%2Fhttpd.git * revert r355823 and r355837 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@355853 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c index 0101c5ff14d..4eab150829e 100644 --- a/modules/proxy/mod_proxy.c +++ b/modules/proxy/mod_proxy.c @@ -758,20 +758,6 @@ static int proxy_handler(request_rec *r) worker->s->status |= PROXY_WORKER_IN_ERROR; } } - else if (access_status == PROXY_BACKEND_BROKEN) { - /* - * If the backend broke after the headers had been sent do not - * try another worker, but leave. Do not mark the worker as - * unsuable as this problem may not reoccur on the next request. - * - * TODO: Currently we abort the connection and notify all parties - * on the upstream that something went wrong by setting c->aborted - * to 1. This idea is currently vetoed and should be replaced with - * other methods - */ - r->connection->aborted = 1; - break; - } else { /* Unrecoverable error. * Return the origin status code to the client. diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h index f84cc254f5d..63ed1afe2cf 100644 --- a/modules/proxy/mod_proxy.h +++ b/modules/proxy/mod_proxy.h @@ -238,12 +238,6 @@ struct proxy_conn_pool { proxy_conn_rec *conn; /* Single connection for prefork mpm's */ }; -/* - * Return code that scheme handlers should return if the backend connection - * broke after they have sent the headers - */ -#define PROXY_BACKEND_BROKEN -10 - /* woker status flags */ #define PROXY_WORKER_INITIALIZED 0x0001 #define PROXY_WORKER_IGNORE_ERRORS 0x0002 diff --git a/modules/proxy/mod_proxy_ajp.c b/modules/proxy/mod_proxy_ajp.c index 7d79eba7138..22e7cefcd7d 100644 --- a/modules/proxy/mod_proxy_ajp.c +++ b/modules/proxy/mod_proxy_ajp.c @@ -138,7 +138,6 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, int havebody = 1; int isok = 1; apr_off_t bb_len; - int data_sent = 0; #ifdef FLUSHING_BANDAID apr_int32_t conn_poll_fd; apr_pollfd_t *conn_poll; @@ -349,8 +348,6 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, "proxy: error processing body"); isok = 0; } - /* memorize that we sent data */ - data_sent = 1; apr_brigade_cleanup(output_brigade); } else { @@ -366,8 +363,6 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, "proxy: error processing body"); isok = 0; } - /* memorize that we sent data */ - data_sent = 1; break; default: isok = 0; @@ -414,15 +409,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, "proxy: send body failed to %pI (%s)", conn->worker->cp->addr, conn->worker->hostname); - /* - * If we have sent data (and thus the headers) we must let the - * others know. - */ - if (data_sent) { - return PROXY_BACKEND_BROKEN; - } else { - return HTTP_SERVICE_UNAVAILABLE; - } + return HTTP_SERVICE_UNAVAILABLE; } /* Nice we have answer to send to the client */ diff --git a/modules/proxy/mod_proxy_http.c b/modules/proxy/mod_proxy_http.c index b751efadc4a..250b7601d02 100644 --- a/modules/proxy/mod_proxy_http.c +++ b/modules/proxy/mod_proxy_http.c @@ -1199,7 +1199,6 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, * are being read. */ int pread_len = 0; apr_table_t *save_table; - int backend_broken = 0; bb = apr_brigade_create(p, c->bucket_alloc); @@ -1487,7 +1486,7 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, */ ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, "proxy: error reading response"); - backend_broken = 1; + c->aborted = 1; break; } /* next time try a non-blocking read */ @@ -1553,9 +1552,9 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, } } while (interim_response); - /* Signal back that the backend broke after we sent the headers. */ - if (backend_broken) { - return PROXY_BACKEND_BROKEN; + /* If our connection with the client is to be aborted, return DONE. */ + if (c->aborted) { + return DONE; } if (conf->error_override) {