# HG changeset patch # User Igor Sysoev # Date 1225902465 0 # Node ID c28e47fb834ce7d451766d8d0191d6429645335a # Parent baa61933d5edccdc8303afa97fa4013f77312167 do not pass gzheader separately as due to the previous commit we do not use ctx->busy as flush condition diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -265,7 +265,7 @@ ngx_http_gzip_body_filter(ngx_http_reque int rc, wbits, memlevel; struct gztrailer *trailer; ngx_buf_t *b; - ngx_chain_t *cl, out; + ngx_chain_t *cl; ngx_http_gzip_ctx_t *ctx; ngx_http_gzip_conf_t *conf; @@ -336,24 +336,18 @@ ngx_http_gzip_body_filter(ngx_http_reque b->pos = gzheader; b->last = b->pos + 10; - out.buf = b; - out.next = NULL; - - /* - * We pass the gzheader to the next filter now to avoid its linking - * to the ctx->busy chain. zlib does not usually output the compressed - * data in the initial iterations, so the gzheader that was linked - * to the ctx->busy chain would be flushed by ngx_http_write_filter(). - */ - - if (ngx_http_next_body_filter(r, &out) == NGX_ERROR) { + cl = ngx_alloc_chain_link(r->pool); + if (cl == NULL) { ngx_http_gzip_error(ctx); return NGX_ERROR; } - r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED; + cl->buf = b; + cl->next = NULL; + ctx->out = cl; + ctx->last_out = &cl->next; - ctx->last_out = &ctx->out; + r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED; ctx->crc32 = crc32(0L, Z_NULL, 0); ctx->flush = Z_NO_FLUSH;