Skip to content

Commit 34868a3

Browse files
committed
MINOR: mux-quic: define STREAM frames list in qcc
1 parent 66ed250 commit 34868a3

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

include/haproxy/mux_quic-t.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct qcc {
6868
struct {
6969
struct quic_fctl fc; /* stream flow control applied on sending */
7070
uint64_t buf_in_flight; /* sum of currently allocated Tx buffer sizes */
71+
struct list frms; /* prepared STREAM frames */
7172
} tx;
7273

7374
uint64_t largest_bidi_r; /* largest remote bidi stream ID opened. */

src/mux_quic.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,7 +2243,6 @@ static int qcs_send(struct qcs *qcs, struct list *frms, uint64_t window_conn)
22432243
*/
22442244
static int qcc_io_send(struct qcc *qcc)
22452245
{
2246-
struct list frms = LIST_HEAD_INIT(frms);
22472246
/* Temporary list for QCS on error. */
22482247
struct list qcs_failed = LIST_HEAD_INIT(qcs_failed);
22492248
struct qcs *qcs, *qcs_tmp, *first_qcs = NULL;
@@ -2337,7 +2336,7 @@ static int qcc_io_send(struct qcc *qcc)
23372336

23382337
if (!qfctl_rblocked(&qcc->tx.fc) &&
23392338
!qfctl_rblocked(&qcs->tx.fc) && window_conn > total) {
2340-
if ((ret = qcs_send(qcs, &frms, window_conn - total)) < 0) {
2339+
if ((ret = qcs_send(qcs, &qcc->tx.frms, window_conn - total)) < 0) {
23412340
/* Temporarily remove QCS from send-list. */
23422341
LIST_DEL_INIT(&qcs->el_send);
23432342
LIST_APPEND(&qcs_failed, &qcs->el_send);
@@ -2361,7 +2360,7 @@ static int qcc_io_send(struct qcc *qcc)
23612360
/* Retry sending until no frame to send, data rejected or connection
23622361
* flow-control limit reached.
23632362
*/
2364-
while (qcc_send_frames(qcc, &frms) == 0 && !qfctl_rblocked(&qcc->tx.fc)) {
2363+
while (qcc_send_frames(qcc, &qcc->tx.frms) == 0 && !qfctl_rblocked(&qcc->tx.fc)) {
23652364
window_conn = qfctl_rcap(&qcc->tx.fc);
23662365
resent = 0;
23672366

@@ -2379,7 +2378,7 @@ static int qcc_io_send(struct qcc *qcc)
23792378
BUG_ON(resent > window_conn);
23802379

23812380
if (!qfctl_rblocked(&qcs->tx.fc) && window_conn > resent) {
2382-
if ((ret = qcs_send(qcs, &frms, window_conn - resent)) < 0) {
2381+
if ((ret = qcs_send(qcs, &qcc->tx.frms, window_conn - resent)) < 0) {
23832382
LIST_DEL_INIT(&qcs->el_send);
23842383
LIST_APPEND(&qcs_failed, &qcs->el_send);
23852384
continue;
@@ -2393,10 +2392,10 @@ static int qcc_io_send(struct qcc *qcc)
23932392

23942393
sent_done:
23952394
/* Deallocate frames that the transport layer has rejected. */
2396-
if (!LIST_ISEMPTY(&frms)) {
2395+
if (!LIST_ISEMPTY(&qcc->tx.frms)) {
23972396
struct quic_frame *frm, *frm2;
23982397

2399-
list_for_each_entry_safe(frm, frm2, &frms, list)
2398+
list_for_each_entry_safe(frm, frm2, &qcc->tx.frms, list)
24002399
qc_frm_free(qcc->conn->handle.qc, &frm);
24012400
}
24022401

@@ -2717,6 +2716,10 @@ static void qcc_release(struct qcc *qcc)
27172716
struct quic_frame *frm = LIST_ELEM(qcc->lfctl.frms.n, struct quic_frame *, list);
27182717
qc_frm_free(qcc->conn->handle.qc, &frm);
27192718
}
2719+
while (!LIST_ISEMPTY(&qcc->tx.frms)) {
2720+
struct quic_frame *frm = LIST_ELEM(qcc->tx.frms.n, struct quic_frame *, list);
2721+
qc_frm_free(qcc->conn->handle.qc, &frm);
2722+
}
27202723

27212724
if (qcc->app_ops && qcc->app_ops->release)
27222725
qcc->app_ops->release(qcc->ctx);
@@ -2831,6 +2834,7 @@ static void _qcc_init(struct qcc *qcc)
28312834
qcc->app_ops = NULL;
28322835
qcc->streams_by_id = EB_ROOT_UNIQUE;
28332836
LIST_INIT(&qcc->lfctl.frms);
2837+
LIST_INIT(&qcc->tx.frms);
28342838
}
28352839

28362840
static int qmux_init(struct connection *conn, struct proxy *prx,

0 commit comments

Comments
 (0)