BUG/MINOR: mux-quic: disable fast-fwd if connection on error

Add a check on nego_ff to ensure connection is not on error. If this is
the case, fast-forward is disable to prevent unnecessary sending. If
snd_buf is latter called, stconn will be notified of the error to
interrupt the stream.

This check is necessary to ensure snd_buf and nego_ff are consistent.
Note that previously, if fast-forward was conducted even on connection
error, no sending would occur as qcc_io_send() also check these flags.
However, there is a risk that stconn is never notified of the error
status, thus it is considered as a bug.

Its impact is minimal for now as fast-forward is disable by default on
QUIC. By fixing it, it should be possible to reactive it soon.

This should be backported up to 2.9.
This commit is contained in:
Amaury Denoyelle 2023-12-21 11:15:19 +01:00
parent 235e8f1afd
commit 19f4f4d890

View File

@ -2868,6 +2868,15 @@ static size_t qmux_strm_nego_ff(struct stconn *sc, struct buffer *input,
goto end;
}
if (qcs->qcc->flags & (QC_CF_ERR_CONN|QC_CF_ERRL)) {
/* Disable fast-forward if connection is on error. Eventually,
* error will be reported to stream-conn if snd_buf is invoked.
*/
TRACE_DEVEL("connection in error", QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
qcs->sd->iobuf.flags |= IOBUF_FL_NO_FF;
goto end;
}
/* Alawys disable splicing */
qcs->sd->iobuf.flags |= IOBUF_FL_NO_SPLICING;