mirror of
https://github.com/nginx/nginx.git
synced 2024-12-22 23:23:32 -06:00
HTTP/2: flushing of the SSL buffer in transition to the idle state.
It fixes potential connection leak if some unsent data was left in the SSL buffer. Particularly, that could happen when a client canceled the stream after the HEADERS frame has already been created. In this case no other frames might be produced and the HEADERS frame alone didn't flush the buffer.
This commit is contained in:
parent
3c81c08cea
commit
a85edfeef6
@ -599,7 +599,8 @@ error:
|
|||||||
static void
|
static void
|
||||||
ngx_http_v2_handle_connection(ngx_http_v2_connection_t *h2c)
|
ngx_http_v2_handle_connection(ngx_http_v2_connection_t *h2c)
|
||||||
{
|
{
|
||||||
ngx_connection_t *c;
|
ngx_int_t rc;
|
||||||
|
ngx_connection_t *c;
|
||||||
ngx_http_v2_srv_conf_t *h2scf;
|
ngx_http_v2_srv_conf_t *h2scf;
|
||||||
|
|
||||||
if (h2c->last_out || h2c->processing) {
|
if (h2c->last_out || h2c->processing) {
|
||||||
@ -614,7 +615,22 @@ ngx_http_v2_handle_connection(ngx_http_v2_connection_t *h2c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (c->buffered) {
|
if (c->buffered) {
|
||||||
return;
|
h2c->blocked = 1;
|
||||||
|
|
||||||
|
rc = ngx_http_v2_send_output_queue(h2c);
|
||||||
|
|
||||||
|
h2c->blocked = 0;
|
||||||
|
|
||||||
|
if (rc == NGX_ERROR) {
|
||||||
|
ngx_http_close_connection(c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc == NGX_AGAIN) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* rc == NGX_OK */
|
||||||
}
|
}
|
||||||
|
|
||||||
h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
|
h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
|
||||||
|
Loading…
Reference in New Issue
Block a user