Upstream keepalive: clean read delayed flag in stored connections.

If a connection with the read delayed flag set was stored in the keepalive
cache, and after picking it from the cache a read timer was set on that
connection, this timer was considered a delay timer rather than a socket read
event timer as expected.  The latter timeout is usually much longer than the
former, which caused a significant delay in request processing.

The issue manifested itself with proxy_limit_rate and upstream keepalive
enabled and exists since 973ee2276300 (1.7.7) when proxy_limit_rate was
introduced.
This commit is contained in:
Roman Arutyunyan 2017-11-28 14:00:00 +03:00
parent 53e5a746bf
commit e13268714f

View File

@ -340,6 +340,7 @@ ngx_http_upstream_free_keepalive_peer(ngx_peer_connection_t *pc, void *data,
pc->connection = NULL;
if (c->read->timer_set) {
c->read->delayed = 0;
ngx_del_timer(c->read);
}
if (c->write->timer_set) {