changeset 403:ea3113b181d1

nginx-0.0.9-2004-07-28-23:21:26 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 28 Jul 2004 19:21:26 +0000
parents f209f3391020
children 37b5381fb6d8
files src/core/ngx_output_chain.c src/http/modules/ngx_http_static_handler.c src/http/ngx_http_write_filter.c
diffstat 3 files changed, 31 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -59,6 +59,17 @@ ngx_int_t ngx_output_chain(ngx_output_ch
              * or there are the free output bufs to copy in
              */
 
+            bsize = ngx_buf_size(ctx->in->buf);
+
+            if (bsize == 0 && !ngx_buf_special(ctx->in->buf)) {
+
+                ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, 0,
+                              "zero size buf");
+
+                ctx->in = ctx->in->next;
+                continue;
+            }
+
             if (!ngx_output_chain_need_to_copy(ctx, ctx->in->buf)) {
 
                 /* move the chain link to the output chain */
@@ -73,13 +84,6 @@ ngx_int_t ngx_output_chain(ngx_output_ch
                 continue;
             }
 
-            bsize = ngx_buf_size(ctx->in->buf);
-
-            if (bsize == 0) {
-                ctx->in = ctx->in->next;
-                continue;
-            }
-
             if (ctx->buf == NULL) {
 
                 /* get the free buf */
--- a/src/http/modules/ngx_http_static_handler.c
+++ b/src/http/modules/ngx_http_static_handler.c
@@ -483,22 +483,32 @@ static ngx_int_t ngx_http_static_handler
     r->headers_out.content_length_n = ngx_file_size(&fi);
     r->headers_out.last_modified_time = ngx_file_mtime(&fi);
 
+    if (r->headers_out.content_length_n == 0) {
+        r->header_only = 1;
+    }
+
     if (ngx_http_set_content_type(r) != NGX_OK) {
         return NGX_HTTP_INTERNAL_SERVER_ERROR;
     }
 
+#if (NGX_SUPPRESS_WARN)
+    b = NULL;
+#endif
 
-    /* we need to allocate all before the header would be sent */
+    if (!r->header_only) {
+        /* we need to allocate all before the header would be sent */
 
-    if (!(b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)))) {
-        return NGX_HTTP_INTERNAL_SERVER_ERROR;
+        if (!(b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)))) {
+            return NGX_HTTP_INTERNAL_SERVER_ERROR;
+        }
+
+        if (!(b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)))) {
+            return NGX_HTTP_INTERNAL_SERVER_ERROR;
+        }
+
+        r->filter_allow_ranges = 1;
     }
 
-    if (!(b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)))) {
-        return NGX_HTTP_INTERNAL_SERVER_ERROR;
-    }
-
-    r->filter_allow_ranges = 1;
     rc = ngx_http_send_header(r);
 
     if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
--- a/src/http/ngx_http_write_filter.c
+++ b/src/http/ngx_http_write_filter.c
@@ -40,7 +40,7 @@ ngx_module_t  ngx_http_write_filter_modu
 ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
 {
     int                           last;
-    off_t                         size, flush, sent, bsize;
+    off_t                         size, flush, sent;
     ngx_chain_t                  *cl, *ln, **ll, *chain;
     ngx_connection_t             *c;
     ngx_http_core_loc_conf_t     *clcf;
@@ -82,13 +82,7 @@ ngx_int_t ngx_http_write_filter(ngx_http
         *ll = cl;
         ll = &cl->next;
 
-        bsize = ngx_buf_size(cl->buf);
-
-        if (bsize == 0 && cl->buf->in_file) {
-            cl->buf->in_file = 0;
-        }
-
-        size += bsize;
+        size += ngx_buf_size(cl->buf);
 
         if (cl->buf->flush || cl->buf->recycled) {
             flush = size;