diff options
author | Roman Arutyunyan <arut@nginx.com> | 2016-10-03 21:03:27 +0300 |
---|---|---|
committer | Roman Arutyunyan <arut@nginx.com> | 2016-10-03 21:03:27 +0300 |
commit | e19481f35e45dc6a0016dc11b63095d88137b719 (patch) | |
tree | b91e922ed0accf6ce1efe7c836c88a0701220e03 | |
parent | 200c7493aef7818bf43443d68380bf10548d8094 (diff) |
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.
-rw-r--r-- | src/http/modules/ngx_http_addition_filter_module.c | 1 |
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; } |