mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 09:42:39 +08:00
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>
This commit is contained in:
parent
e13268714f
commit
7b3f187bc6
@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r,
|
|||||||
|
|
||||||
if (do_write) {
|
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);
|
rc = ngx_http_output_filter(r, u->out_bufs);
|
||||||
|
|
||||||
if (rc == NGX_ERROR) {
|
if (rc == NGX_ERROR) {
|
||||||
|
Loading…
Reference in New Issue
Block a user