diff options
author | Valentin Bartenev <vbart@nginx.com> | 2016-07-19 20:22:44 +0300 |
---|---|---|
committer | Valentin Bartenev <vbart@nginx.com> | 2016-07-19 20:22:44 +0300 |
commit | da852aa468db80f9e5138aea81a1bebb90e0be51 (patch) | |
tree | c7f7d927e1fd7c77f0948e3f305228d5c0bbd07d /src | |
parent | 19de85a4d75e7eada6afb8f59ce6d5de0ec10d5c (diff) | |
download | nginx-da852aa468db80f9e5138aea81a1bebb90e0be51.tar.gz nginx-da852aa468db80f9e5138aea81a1bebb90e0be51.zip |
HTTP/2: always handle streams in error state.
Previously, a stream could be closed by timeout if it was canceled
while its send window was exhausted.
Diffstat (limited to 'src')
-rw-r--r-- | src/http/v2/ngx_http_v2_filter_module.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c index a53cae13f..4ab779121 100644 --- a/src/http/v2/ngx_http_v2_filter_module.c +++ b/src/http/v2/ngx_http_v2_filter_module.c @@ -1294,18 +1294,20 @@ static ngx_inline void ngx_http_v2_handle_stream(ngx_http_v2_connection_t *h2c, ngx_http_v2_stream_t *stream) { - ngx_event_t *wev; + ngx_connection_t *fc; - if (stream->handled || stream->blocked || stream->exhausted) { + if (stream->handled || stream->blocked) { return; } - wev = stream->request->connection->write; + fc = stream->request->connection; - if (!wev->delayed) { - stream->handled = 1; - ngx_queue_insert_tail(&h2c->posted, &stream->queue); + if (!fc->error && (stream->exhausted || fc->write->delayed)) { + return; } + + stream->handled = 1; + ngx_queue_insert_tail(&h2c->posted, &stream->queue); } |