Welcome! Log In Create A New Profile

Advanced

[nginx] Upstream: flush low-level buffers on write retry.

Maxim Dounin
December 05, 2017 10:16AM
details: http://hg.nginx.org/nginx/rev/a762ddf22dbb
branches:
changeset: 7166:a762ddf22dbb
user: Patryk Lesiewicz <patryk@google.com>
date: Fri Dec 01 15:59:14 2017 -0800
description:
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>

diffstat:

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

diffs (12 lines):

diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_r

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) {
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Upstream: flush low-level buffers on write retry.

Maxim Dounin 535 December 05, 2017 10:16AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 293
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready