changeset 1039:73f18b6ad6ba

fix FastCGI "zero size buf" alert, r841 did not fix it
author Igor Sysoev <igor@sysoev.ru>
date Wed, 17 Jan 2007 16:10:40 +0000
parents c136df6c5ff0
children d536a2332385
files src/event/ngx_event_pipe.c
diffstat 1 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/ngx_event_pipe.c
+++ b/src/event/ngx_event_pipe.c
@@ -420,7 +420,7 @@ static ngx_int_t
 ngx_event_pipe_write_to_downstream(ngx_event_pipe_t *p)
 {
     size_t             bsize;
-    ngx_uint_t         flush;
+    ngx_uint_t         flush, prev_last_shadow;
     ngx_chain_t       *out, **ll, *cl;
     ngx_connection_t  *downstream;
 
@@ -511,6 +511,7 @@ ngx_event_pipe_write_to_downstream(ngx_e
         out = NULL;
         ll = NULL;
         flush = 0;
+        prev_last_shadow = 1;
 
         for ( ;; ) {
             if (p->out) {
@@ -520,10 +521,16 @@ ngx_event_pipe_write_to_downstream(ngx_e
                     && cl->buf->last_shadow
                     && bsize + cl->buf->last - cl->buf->pos > p->busy_size)
                 {
+                    if (!prev_last_shadow) {
+                        p->in = p->in->next;
+                    }
+
                     flush = 1;
                     break;
                 }
 
+                prev_last_shadow = cl->buf->last_shadow;
+
                 p->out = p->out->next;
 
                 ngx_event_pipe_free_shadow_raw_buf(&p->free_raw_bufs, cl->buf);
@@ -541,10 +548,16 @@ ngx_event_pipe_write_to_downstream(ngx_e
                     && cl->buf->last_shadow
                     && bsize + cl->buf->last - cl->buf->pos > p->busy_size)
                 {
+                    if (!prev_last_shadow) {
+                        p->in = p->in->next;
+                    }
+
                     flush = 1;
                     break;
                 }
 
+                prev_last_shadow = cl->buf->last_shadow;
+
                 p->in = p->in->next;
 
             } else {