Skip to content

Commit 096599b

Browse files
committed
MAJOR: mux_quic: open bwnd earlier on FIN sent
1 parent 08aa123 commit 096599b

1 file changed

Lines changed: 11 additions & 5 deletions

File tree

src/mux_quic.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -696,11 +696,15 @@ static void qcm_ctrl_send(struct qc_stream_desc *stream, uint64_t data, uint64_t
696696
QMUX_EV_QCS_SEND, qcc->conn, qcs);
697697
}
698698
/* Release buffer if everything sent and buf is full or stream is waiting for room. */
699-
if (!qcs_prep_bytes(qcs) &&
700-
(b_full(&qcs->tx.stream->buf->buf) || qcs->flags & QC_SF_BLK_MROOM)) {
701-
qc_stream_buf_release(qcs->tx.stream);
702-
qcs->flags &= ~QC_SF_BLK_MROOM;
703-
qcs_notify_send(qcs);
699+
if (!qcs_prep_bytes(qcs)) {
700+
if (b_full(&qcs->tx.stream->buf->buf) || qcs->flags & QC_SF_BLK_MROOM) {
701+
qc_stream_buf_release(qcs->tx.stream);
702+
qcs->flags &= ~QC_SF_BLK_MROOM;
703+
qcs_notify_send(qcs);
704+
}
705+
else if (qcs->flags & QC_SF_FIN_STREAM) {
706+
qc_stream_buf_release(qcs->tx.stream);
707+
}
704708
}
705709

706710
/* Add measurement for send rate. This is done at the MUX layer
@@ -4471,6 +4475,7 @@ static size_t qcm_strm_snd_buf(struct stconn *sc, struct buffer *buf,
44714475
if (fin) {
44724476
TRACE_STATE("reached stream fin", QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
44734477
qcs->flags |= QC_SF_FIN_STREAM;
4478+
qc_stream_buf_release(qcs->tx.stream);
44744479
}
44754480

44764481
if (ret || fin) {
@@ -4589,6 +4594,7 @@ static size_t qcm_strm_done_ff(struct stconn *sc)
45894594
if (sd->iobuf.flags & IOBUF_FL_EOI) {
45904595
TRACE_STATE("reached stream fin", QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
45914596
qcs->flags |= QC_SF_FIN_STREAM;
4597+
qc_stream_buf_release(qcs->tx.stream);
45924598
}
45934599

45944600
if (!(qcs->flags & QC_SF_FIN_STREAM) && !sd->iobuf.data) {

0 commit comments

Comments
 (0)