comparison src/http/ngx_http_upstream.c @ 7966:5d09596909c6 stable-1.20

Upstream: fixed timeouts with gRPC, SSL and select (ticket #2229). With SSL it is possible that an established connection is ready for reading after the handshake. Further, events might be already disabled in case of level-triggered event methods. If this happens and ngx_http_upstream_send_request() blocks waiting for some data from the upstream, such as flow control in case of gRPC, the connection will time out due to no read events on the upstream connection. Fix is to explicitly check the c->read->ready flag if sending request blocks and post a read event if it is set. Note that while it is possible to modify ngx_ssl_handshake() to keep read events active, this won't completely resolve the issue, since there can be data already received during the SSL handshake (see 573bd30e46b4).
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 20 Aug 2021 03:53:56 +0300
parents 1ebd78df4ce7
children
comparison
equal deleted inserted replaced
7965:f2bbbc0ccdfb 7966:5d09596909c6
2060 } 2060 }
2061 2061
2062 c->tcp_nopush = NGX_TCP_NOPUSH_UNSET; 2062 c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
2063 } 2063 }
2064 2064
2065 if (c->read->ready) {
2066 ngx_post_event(c->read, &ngx_posted_events);
2067 }
2068
2065 return; 2069 return;
2066 } 2070 }
2067 2071
2068 /* rc == NGX_OK */ 2072 /* rc == NGX_OK */
2069 2073