changeset 2288:c28e47fb834c

do not pass gzheader separately as due to the previous commit we do not use ctx->busy as flush condition
author Igor Sysoev <igor@sysoev.ru>
date Wed, 05 Nov 2008 16:27:45 +0000
parents baa61933d5ed
children 857c161d2768
files src/http/modules/ngx_http_gzip_filter_module.c
diffstat 1 files changed, 8 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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;