summaryrefslogtreecommitdiffstats
path: root/src/mux_quic.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-11 17:06:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-11 17:06:51 +0000
commitc6b0a8942f792c9fae204eee8ac60042573a8726 (patch)
tree2a430cbf23b4a8c1c3dfdfa3edf95c8692a5bcea /src/mux_quic.c
parentAdding debian version 3.0.0-1. (diff)
downloadhaproxy-c6b0a8942f792c9fae204eee8ac60042573a8726.tar.xz
haproxy-c6b0a8942f792c9fae204eee8ac60042573a8726.zip
Merging upstream version 3.0.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/mux_quic.c')
-rw-r--r--src/mux_quic.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/mux_quic.c b/src/mux_quic.c
index ae504ee..8272b93 100644
--- a/src/mux_quic.c
+++ b/src/mux_quic.c
@@ -3046,8 +3046,17 @@ static size_t qmux_strm_done_ff(struct stconn *sc)
qcs->flags |= QC_SF_FIN_STREAM;
}
- if (!(qcs->flags & QC_SF_FIN_STREAM) && !sd->iobuf.data)
+ if (!(qcs->flags & QC_SF_FIN_STREAM) && !sd->iobuf.data) {
+ TRACE_STATE("no data sent", QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
+
+ /* There is nothing to forward and the SD was blocked after a
+ * successful nego by the producer. We can try to release the
+ * TXBUF to retry. In this case, the TX buf MUST exist.
+ */
+ if ((qcs->sd->iobuf.flags & IOBUF_FL_FF_WANT_ROOM) && !qcc_release_stream_txbuf(qcs))
+ qcs->sd->iobuf.flags &= ~(IOBUF_FL_FF_BLOCKED|IOBUF_FL_FF_WANT_ROOM);
goto end;
+ }
data += sd->iobuf.offset;
total = qcs->qcc->app_ops->done_ff(qcs);