diff src/http/ngx_http_write_filter_module.c @ 146:36af50a5582d NGINX_0_3_20

nginx 0.3.20 *) Bugfix: in SSI handling. *) Bugfix: the ngx_http_memcached_module did not support the keys in the "/usr?args" form.
author Igor Sysoev <http://sysoev.ru>
date Wed, 11 Jan 2006 00:00:00 +0300
parents 91372f004adf
children 13710a1813ad
line wrap: on
line diff
--- a/src/http/ngx_http_write_filter_module.c
+++ b/src/http/ngx_http_write_filter_module.c
@@ -179,20 +179,24 @@ ngx_http_write_filter(ngx_http_request_t
     }
 
     if (c->write->delayed) {
+        c->buffered |= NGX_HTTP_WRITE_BUFFERED;
         return NGX_AGAIN;
     }
 
-    if (size == 0 && !c->buffered) {
+    if (size == 0 && !(c->buffered & NGX_LOWLEVEL_BUFFERED)) {
         if (last) {
             r->out = NULL;
+            c->buffered &= ~NGX_HTTP_WRITE_BUFFERED;
+
             return NGX_OK;
         }
 
         if (flush) {
             do {
                 r->out = r->out->next;
-            }
-            while (r->out);
+            } while (r->out);
+
+            c->buffered &= ~NGX_HTTP_WRITE_BUFFERED;
 
             return NGX_OK;
         }
@@ -232,7 +236,14 @@ ngx_http_write_filter(ngx_http_request_t
 
     r->out = chain;
 
-    if (chain || (c->buffered && r->postponed == NULL)) {
+    if (chain) {
+        c->buffered |= NGX_HTTP_WRITE_BUFFERED;
+        return NGX_AGAIN;
+    }
+
+    c->buffered &= ~NGX_HTTP_WRITE_BUFFERED;
+
+    if ((c->buffered & NGX_LOWLEVEL_BUFFERED) && r->postponed == NULL) {
         return NGX_AGAIN;
     }