diff options
author | Sergey Kandaurov <pluknet@nginx.com> | 2021-03-24 14:03:33 +0300 |
---|---|---|
committer | Sergey Kandaurov <pluknet@nginx.com> | 2021-03-24 14:03:33 +0300 |
commit | cc73d7688c315dc624282abdbbba7aec82aabad5 (patch) | |
tree | 14f8265665fbbd5450cc0ab1e58cd4d3865a2215 /src/http/ngx_http_request.c | |
parent | 11477fb633ddaf299f9be01f43aac322056d98dc (diff) | |
download | nginx-cc73d7688c315dc624282abdbbba7aec82aabad5.tar.gz nginx-cc73d7688c315dc624282abdbbba7aec82aabad5.zip |
Cancel keepalive and lingering close on EOF better (ticket #2145).
Unlike in 75e908236701, which added the logic to ngx_http_finalize_request(),
this change moves it to a more generic routine ngx_http_finalize_connection()
to cover cases when a request is finalized with NGX_DONE.
In particular, this fixes unwanted connection transition into the keepalive
state after receiving EOF while discarding request body. With edge-triggered
event methods that means the connection will last for extra seconds as set in
the keepalive_timeout directive.
Diffstat (limited to 'src/http/ngx_http_request.c')
-rw-r--r-- | src/http/ngx_http_request.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index d129f8079..684fabdd6 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -2643,11 +2643,6 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc) ngx_del_timer(c->write); } - if (c->read->eof) { - ngx_http_close_request(r, 0); - return; - } - ngx_http_finalize_connection(r); } @@ -2746,6 +2741,11 @@ ngx_http_finalize_connection(ngx_http_request_t *r) r = r->main; + if (r->connection->read->eof) { + ngx_http_close_request(r, 0); + return; + } + if (r->reading_body) { r->keepalive = 0; r->lingering_close = 1; |