From: Graham Leggett Date: Sun, 16 Nov 2008 22:41:53 +0000 (+0000) Subject: mod_buffer: Honour the flush bucket and flush the buffer in the X-Git-Tag: 2.3.0~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8944de6fc2bbefdba72b5d7a5c849c0b7ad1740a;p=thirdparty%2Fapache%2Fhttpd.git mod_buffer: Honour the flush bucket and flush the buffer in the input filter. Make sure that metadata buckets are written to the buffer, not to the final brigade. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@718132 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index be59cd1daec..d677d691868 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ Changes with Apache 2.3.0 [ When backported to 2.2.x, remove entry from this file ] + *) mod_buffer: Honour the flush bucket and flush the buffer in the + input filter. Make sure that metadata buckets are written to + the buffer, not to the final brigade. [Graham Leggett] + *) mod_buffer: Optimise the buffering of heap buckets when the heap buckets stay exactly APR_BUCKET_BUFF_SIZE long. [Graham Leggett, Ruediger Pluem] diff --git a/modules/filters/mod_buffer.c b/modules/filters/mod_buffer.c index 08a800f3e28..f7e15a52e86 100644 --- a/modules/filters/mod_buffer.c +++ b/modules/filters/mod_buffer.c @@ -239,10 +239,17 @@ static apr_status_t buffer_in_filter(ap_filter_t *f, apr_bucket_brigade *bb, break; } - /* pass flush and metadata buckets through */ - if (APR_BUCKET_IS_FLUSH(e) || APR_BUCKET_IS_METADATA(e)) { + /* flush buckets clear the buffer */ + if (APR_BUCKET_IS_FLUSH(e)) { APR_BUCKET_REMOVE(e); - APR_BRIGADE_INSERT_TAIL(bb, e); + APR_BRIGADE_INSERT_TAIL(ctx->bb, e); + break; + } + + /* pass metadata buckets through */ + if (APR_BUCKET_IS_METADATA(e)) { + APR_BUCKET_REMOVE(e); + APR_BRIGADE_INSERT_TAIL(ctx->bb, e); continue; }