60 lines
2.3 KiB
Diff
60 lines
2.3 KiB
Diff
|
# ./pullrev.sh 1833841
|
||
|
http://svn.apache.org/viewvc?view=revision&revision=1833841
|
||
|
|
||
|
--- httpd-2.4.33/modules/http/http_request.c
|
||
|
+++ httpd-2.4.33/modules/http/http_request.c
|
||
|
@@ -345,6 +345,16 @@
|
||
|
return rv;
|
||
|
}
|
||
|
|
||
|
+#define RETRIEVE_BRIGADE_FROM_POOL(bb, key, pool, allocator) do { \
|
||
|
+ apr_pool_userdata_get((void **)&bb, key, pool); \
|
||
|
+ if (bb == NULL) { \
|
||
|
+ bb = apr_brigade_create(pool, allocator); \
|
||
|
+ apr_pool_userdata_setn((const void *)bb, key, NULL, pool); \
|
||
|
+ } \
|
||
|
+ else { \
|
||
|
+ apr_brigade_cleanup(bb); \
|
||
|
+ } \
|
||
|
+} while(0)
|
||
|
|
||
|
AP_DECLARE(void) ap_process_request_after_handler(request_rec *r)
|
||
|
{
|
||
|
@@ -357,7 +367,8 @@
|
||
|
* this bucket is destroyed, the request will be logged and
|
||
|
* its pool will be freed
|
||
|
*/
|
||
|
- bb = apr_brigade_create(c->pool, c->bucket_alloc);
|
||
|
+ RETRIEVE_BRIGADE_FROM_POOL(bb, "ap_process_request_after_handler_brigade",
|
||
|
+ c->pool, c->bucket_alloc);
|
||
|
b = ap_bucket_eor_create(c->bucket_alloc, r);
|
||
|
APR_BRIGADE_INSERT_HEAD(bb, b);
|
||
|
|
||
|
@@ -383,7 +394,7 @@
|
||
|
*/
|
||
|
rv = ap_check_pipeline(c, bb, DEFAULT_LIMIT_BLANK_LINES);
|
||
|
c->data_in_input_filters = (rv == APR_SUCCESS);
|
||
|
- apr_brigade_destroy(bb);
|
||
|
+ apr_brigade_cleanup(bb);
|
||
|
|
||
|
if (c->cs)
|
||
|
c->cs->state = (c->aborted) ? CONN_STATE_LINGER
|
||
|
@@ -477,7 +488,8 @@
|
||
|
ap_process_async_request(r);
|
||
|
|
||
|
if (!c->data_in_input_filters) {
|
||
|
- bb = apr_brigade_create(c->pool, c->bucket_alloc);
|
||
|
+ RETRIEVE_BRIGADE_FROM_POOL(bb, "ap_process_request_brigade",
|
||
|
+ c->pool, c->bucket_alloc);
|
||
|
b = apr_bucket_flush_create(c->bucket_alloc);
|
||
|
APR_BRIGADE_INSERT_HEAD(bb, b);
|
||
|
rv = ap_pass_brigade(c->output_filters, bb);
|
||
|
@@ -490,6 +502,7 @@
|
||
|
ap_log_cerror(APLOG_MARK, APLOG_INFO, rv, c, APLOGNO(01581)
|
||
|
"flushing data to the client");
|
||
|
}
|
||
|
+ apr_brigade_cleanup(bb);
|
||
|
}
|
||
|
if (ap_extended_status) {
|
||
|
ap_time_process_request(c->sbh, STOP_PREQUEST);
|