mirror of
https://github.com/nginx/nginx.git
synced 2025-08-05 22:26:15 +08:00
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.
This commit is contained in:
parent
11477fb633
commit
cc73d7688c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user