Mercurial > hg > nginx
changeset 7166:a762ddf22dbb
Upstream: flush low-level buffers on write retry.
If the data to write is bigger than what the socket can send, and the
reminder is smaller than NGX_SSL_BUFSIZE, then SSL_write() fails with
SSL_ERROR_WANT_WRITE. The reminder of payload however is successfully
copied to the low-level buffer and all the output chain buffers are
flushed. This means that retry logic doesn't work because
ngx_http_upstream_process_non_buffered_request() checks only if there's
anything in the output chain buffers and ignores the fact that something
may be buffered in low-level parts of the stack.
Signed-off-by: Patryk Lesiewicz <patryk@google.com>
author | Patryk Lesiewicz <patryk@google.com> |
---|---|
date | Fri, 01 Dec 2017 15:59:14 -0800 |
parents | 1cb92a2d672e |
children | 8530aea9aa50 |
files | src/http/ngx_http_upstream.c |
diffstat | 1 files changed, 1 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_upstream.c Tue Nov 28 14:00:00 2017 +0300 +++ b/src/http/ngx_http_upstream.c Fri Dec 01 15:59:14 2017 -0800 @@ -3533,7 +3533,7 @@ if (do_write) { - if (u->out_bufs || u->busy_bufs) { + if (u->out_bufs || u->busy_bufs || downstream->buffered) { rc = ngx_http_output_filter(r, u->out_bufs); if (rc == NGX_ERROR) {