Thanks for your comments.
On Wednesday 23 September 2009, Ruediger Pluem wrote:
> --- modules/http/chunk_filter.c (Revision 818232)
> +++ modules/http/chunk_filter.c (Arbeitskopie)
> @@ -49,11 +49,11 @@
> #define ASCII_CRLF "\015\012"
> #define ASCII_ZERO "\060"
> conn_rec *c = f->r->connection;
> - apr_bucket_brigade *more;
> + apr_bucket_brigade *more, *tmp;
> apr_bucket *e;
> apr_status_t rv;
>
> - for (more = NULL; b; b = more, more = NULL) {
> + for (more = tmp = NULL; b; tmp = b, b = more, more = NULL) {
> apr_off_t bytes = 0;
> apr_bucket *eos = NULL;
> apr_bucket *flush = NULL;
> @@ -85,7 +85,8 @@
> if (APR_BUCKET_IS_FLUSH(e)) {
> flush = e;
> if (e != APR_BRIGADE_LAST(b)) {
> - more = apr_brigade_split(b,
> APR_BUCKET_NEXT(e)); + more =
> apr_brigade_split_ex(b, APR_BUCKET_NEXT(e), tmp); +
> tmp = NULL;
> }
> break;
> }
> @@ -105,7 +106,8 @@
> * block so we pass down what we have so far.
> */
> bytes += len;
> - more = apr_brigade_split(b,
> APR_BUCKET_NEXT(e)); + more =
> apr_brigade_split_ex(b, APR_BUCKET_NEXT(e), tmp); +
> tmp = NULL;
> break;
> }
> else {
>
> What is the point here? tmp is always NULL when passed to
> apr_brigade_split_ex so apr_brigade_split_ex == apr_brigade_split
You missed the tmp = b at the beginning of the loop. The tmp = NULL
lines were actually not needed. I have changed this a bit to hopefully
make it clearer and commited the patch together with the other changes
you suggested.
Cheers,
Stefan