[nginx] Write filter: fixed handling of sync bufs (ticket #132).

Maxim Dounin mdounin at mdounin.ru
Fri Nov 28 14:00:14 UTC 2014


details:   http://hg.nginx.org/nginx/rev/08bfc7188a41
branches:  
changeset: 5926:08bfc7188a41
user:      Maxim Dounin <mdounin at mdounin.ru>
date:      Fri Nov 28 16:58:39 2014 +0300
description:
Write filter: fixed handling of sync bufs (ticket #132).

diffstat:

 src/http/ngx_http_write_filter_module.c |  13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diffs (51 lines):

diff --git a/src/http/ngx_http_write_filter_module.c b/src/http/ngx_http_write_filter_module.c
--- a/src/http/ngx_http_write_filter_module.c
+++ b/src/http/ngx_http_write_filter_module.c
@@ -48,7 +48,7 @@ ngx_int_t
 ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
 {
     off_t                      size, sent, nsent, limit;
-    ngx_uint_t                 last, flush;
+    ngx_uint_t                 last, flush, sync;
     ngx_msec_t                 delay;
     ngx_chain_t               *cl, *ln, **ll, *chain;
     ngx_connection_t          *c;
@@ -62,6 +62,7 @@ ngx_http_write_filter(ngx_http_request_t
 
     size = 0;
     flush = 0;
+    sync = 0;
     last = 0;
     ll = &r->out;
 
@@ -105,6 +106,10 @@ ngx_http_write_filter(ngx_http_request_t
             flush = 1;
         }
 
+        if (cl->buf->sync) {
+            sync = 1;
+        }
+
         if (cl->buf->last_buf) {
             last = 1;
         }
@@ -157,6 +162,10 @@ ngx_http_write_filter(ngx_http_request_t
             flush = 1;
         }
 
+        if (cl->buf->sync) {
+            sync = 1;
+        }
+
         if (cl->buf->last_buf) {
             last = 1;
         }
@@ -188,7 +197,7 @@ ngx_http_write_filter(ngx_http_request_t
         && !(c->buffered & NGX_LOWLEVEL_BUFFERED)
         && !(last && c->need_last_buf))
     {
-        if (last || flush) {
+        if (last || flush || sync) {
             for (cl = r->out; cl; /* void */) {
                 ln = cl;
                 cl = cl->next;



More information about the nginx-devel mailing list