[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