Mercurial > hg > nginx
diff src/http/modules/ngx_http_limit_req_module.c @ 6961:903fb1ddc07f
Moved handling of wev->delayed to the connection event handler.
With post_action or subrequests, it is possible that the timer set for
wev->delayed will expire while the active subrequest write event handler
is not ready to handle this. This results in request hangs as observed
with limit_rate / sendfile_max_chunk and post_action (ticket #776) or
subrequests (ticket #1228).
Moving the handling to the connection event handler fixes the hangs observed,
and also slightly simplifies the code.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sun, 02 Apr 2017 14:32:29 +0300 |
parents | 7fcf209d40c8 |
children | bd6563e81cea |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_limit_req_module.c Sun Apr 02 14:32:28 2017 +0300 +++ b/src/http/modules/ngx_http_limit_req_module.c Sun Apr 02 14:32:29 2017 +0300 @@ -294,7 +294,7 @@ wev = r->connection->write; - if (wev->delayed && !wev->timedout) { + if (wev->delayed) { if (ngx_handle_write_event(wev, 0) != NGX_OK) { ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); @@ -303,9 +303,6 @@ return; } - wev->delayed = 0; - wev->timedout = 0; - if (ngx_handle_read_event(r->connection->read, 0) != NGX_OK) { ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return;