[nginx] HTTP/2: always handle streams in error state.
Maxim Dounin
mdounin at mdounin.ru
Tue Oct 18 14:48:20 UTC 2016
details: http://hg.nginx.org/nginx/rev/73e62bd2ce69
branches: stable-1.10
changeset: 6761:73e62bd2ce69
user: Valentin Bartenev <vbart at nginx.com>
date: Tue Jul 19 20:22:44 2016 +0300
description:
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:
src/http/v2/ngx_http_v2_filter_module.c | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diffs (30 lines):
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c
--- a/src/http/v2/ngx_http_v2_filter_module.c
+++ b/src/http/v2/ngx_http_v2_filter_module.c
@@ -1317,18 +1317,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);
}
More information about the nginx-devel
mailing list