From: Ruediger Pluem Date: Fri, 28 Feb 2014 20:42:50 +0000 (+0000) Subject: Merge r1534321, r1550061 from trunk: X-Git-Tag: 2.2.27~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=188cf6b3c243ad376ae6077a8f9b68aaf46636aa;p=thirdparty%2Fapache%2Fhttpd.git Merge r1534321, r1550061 from trunk: * modules/proxy/mod_proxy_http.c (ap_proxy_http_request): Use the same brigade lifetime for the header brigade as the other brigades. POSSIBLE (but as yet unconfirmed) fix for crashes seen with threaded servers, e.g. PR 50335; appears correct or at least not harmful. PR: 50335 Cleanup the bb brigade, because buckets inserted to it can be created from scpool and this pool can be freed before this brigade. POSSIBLE (but as yet unconfirmed) fix for crashes seen with threaded servers, e.g. PR 50335. Reviewed by: rpluem, jorton, ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1573067 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index f4bd9dfad47..c64ba375405 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.27 + *) mod_proxy_http: Core dumped under high load. PR 50335. + [Jan Kaluza ] + *) mod_rewrite: Add mod_rewrite.h to the headers installed on Windows. PR46679 [Bob Ionescu] diff --git a/STATUS b/STATUS index f4788e454ae..745c6cb9a1c 100644 --- a/STATUS +++ b/STATUS @@ -103,15 +103,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: 2.2.x: trunk patch applies aka `svn merge -c 1556428 ^/httpd/httpd/trunk` +1: breser, rpluem, gstein, wrowe - * mod_proxy_http: Core dumped under high load due to allocator / pool lifetime - issues. PR 50335 - Trunk version of patch: - http://svn.apache.org/viewvc?view=revision&revision=1534321 - http://svn.apache.org/viewvc?view=revision&revision=1550061 - Backport version for 2.2.x of patch: - http://people.apache.org/~rpluem/patches/mod_proxy_http_50335.2.2.x.diff - +1: rpluem, jorton, ylavic - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/proxy/mod_proxy_http.c b/modules/proxy/mod_proxy_http.c index 072c24a36f1..ad279858a1d 100644 --- a/modules/proxy/mod_proxy_http.c +++ b/modules/proxy/mod_proxy_http.c @@ -709,7 +709,7 @@ int ap_proxy_http_request(apr_pool_t *p, request_rec *r, int force10, rv; apr_table_t *headers_in_copy; - header_brigade = apr_brigade_create(p, origin->bucket_alloc); + header_brigade = apr_brigade_create(p, bucket_alloc); /* * Send the HTTP/1.1 request to the remote server @@ -1865,6 +1865,10 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, } } while (interim_response && (interim_response < AP_MAX_INTERIM_RESPONSES)); + /* We have to cleanup bb brigade, because buckets inserted to it could be + * created from scpool and this pool can be freed before this brigade. */ + apr_brigade_cleanup(bb); + /* See define of AP_MAX_INTERIM_RESPONSES for why */ if (interim_response >= AP_MAX_INTERIM_RESPONSES) { return ap_proxyerror(r, HTTP_BAD_GATEWAY,