From: Sergey Kandaurov Date: Fri, 25 Sep 2026 15:34:44 +0000 (+0000) Subject: HTTP/2: do not block the output queue on trailers X-Git-Url: https://git.kaiwu.me/?a=commitdiff_plain;h=867aefddbce17efd0e1e6ab1bfd5522e6e4cdc7d;p=nginx.git HTTP/2: do not block the output queue on trailers Unlike response headers, trailers are queued along with the stream data. Blocking the queue on them would hold back every frame queued later, including higher priority streams. Also, this way unsent trailers are discarded along with the stream data when the stream is reset. --- diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c index c82cbbddf..61e637137 100644 --- a/src/http/v2/ngx_http_v2_filter_module.c +++ b/src/http/v2/ngx_http_v2_filter_module.c @@ -1227,6 +1227,7 @@ ngx_http_v2_send_chain(ngx_connection_t *fc, ngx_chain_t *in, off_t limit) } if (trailers != NGX_HTTP_V2_NO_TRAILERS) { + trailers->blocked = 0; cl->buf->last_buf = 0; } } @@ -1732,7 +1733,9 @@ ngx_http_v2_filter_cleanup(void *data) if (frame->stream == stream && !frame->blocked) { *fn = frame->next; - window += frame->length; + if (frame->handler == ngx_http_v2_data_frame_handler) { + window += frame->length; + } if (--stream->queued == 0) { break;