[PATCH] Stream: allow waiting on a blocked QUIC stream (ticket #2479)

Roman Arutyunyan arut at nginx.com
Thu Apr 6 11:41:33 UTC 2023


# HG changeset patch
# User Roman Arutyunyan <arut at nginx.com>
# Date 1680781188 -14400
#      Thu Apr 06 15:39:48 2023 +0400
# Branch quic
# Node ID 078d2beff084108a10b6b0549d1696561cdee141
# Parent  f68fdb01714121017a91a60370c074e59b730239
Stream: allow waiting on a blocked QUIC stream (ticket #2479).

Previously, waiting on a shared connection was not allowed, because the only
type of such connection was plain UDP.  However, QUIC stream connections are
also shared since they share socket descriptor with the listen connection.
Meanwhile, it's perfectly normal to wait on such connections.

The issue manifested itself with stream write errors when the amount of data
exceeded stream buffer size or flow control.  Now no error is triggered
and Stream write module is allowed to wait for buffer space to become available.

diff --git a/src/stream/ngx_stream_write_filter_module.c b/src/stream/ngx_stream_write_filter_module.c
--- a/src/stream/ngx_stream_write_filter_module.c
+++ b/src/stream/ngx_stream_write_filter_module.c
@@ -277,7 +277,12 @@ ngx_stream_write_filter(ngx_stream_sessi
     *out = chain;
 
     if (chain) {
-        if (c->shared) {
+        if (c->shared
+#if (NGX_STREAM_QUIC)
+            && c->quic == NULL
+#endif
+           )
+        {
             ngx_log_error(NGX_LOG_ALERT, c->log, 0,
                           "shared connection is busy");
             return NGX_ERROR;


More information about the nginx-devel mailing list