aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2016-10-03 21:03:27 +0300
committerRoman Arutyunyan <arut@nginx.com>2016-10-03 21:03:27 +0300
commit967ebbec321b1daa6632ab843b2dd2346a9fa8d0 (patch)
tree622f7e51235aea4b99a6a6787b67fb5546961afc /src
parentf3bbd1c87f0bc97367603c3254c1465d3c622d1f (diff)
downloadnginx-967ebbec321b1daa6632ab843b2dd2346a9fa8d0.tar.gz
nginx-967ebbec321b1daa6632ab843b2dd2346a9fa8d0.zip
Addition filter: set last_in_chain flag when clearing last_buf.
When the last_buf flag is cleared for add_after_body to append more data from a subrequest, other filters may still have buffered data, which should be flushed at this point. For example, the sub_filter may have a partial match buffered, which will only be flushed after the subrequest is done, ending up with interleaved data in output. Setting last_in_chain instead of last_buf flushes the data and fixes the order of output buffers.
Diffstat (limited to 'src')
-rw-r--r--src/http/modules/ngx_http_addition_filter_module.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/http/modules/ngx_http_addition_filter_module.c b/src/http/modules/ngx_http_addition_filter_module.c
index db4970bf1..2fad0e59b 100644
--- a/src/http/modules/ngx_http_addition_filter_module.c
+++ b/src/http/modules/ngx_http_addition_filter_module.c
@@ -171,6 +171,7 @@ ngx_http_addition_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
for (cl = in; cl; cl = cl->next) {
if (cl->buf->last_buf) {
cl->buf->last_buf = 0;
+ cl->buf->last_in_chain = 1;
cl->buf->sync = 1;
last = 1;
}