mirror of
https://github.com/nginx/nginx.git
synced 2026-06-04 14:26:06 -04:00
HTTP/2: send the output queue after emitting WINDOW_UPDATE.
The WINDOW_UPDATE frame could be left in the output queue for an indefinite period of time resulting in the request timeout. This might happen if reading of the body was triggered by an event unrelated to client connection, e.g. by the limit_req timer.
This commit is contained in:
parent
7458f66675
commit
22285687c9
1 changed files with 10 additions and 0 deletions
|
|
@ -3414,6 +3414,7 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
|||
ngx_http_v2_stream_t *stream;
|
||||
ngx_http_request_body_t *rb;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
ngx_http_v2_connection_t *h2c;
|
||||
|
||||
stream = r->stream;
|
||||
|
||||
|
|
@ -3498,6 +3499,15 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
|||
stream->skip_data = 1;
|
||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
h2c = stream->connection;
|
||||
|
||||
if (!h2c->blocked) {
|
||||
if (ngx_http_v2_send_output_queue(h2c) == NGX_ERROR) {
|
||||
stream->skip_data = 1;
|
||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ngx_add_timer(r->connection->read, clcf->client_body_timeout);
|
||||
|
|
|
|||
Loading…
Reference in a new issue