Skip to content

Commit fbf5b18

Browse files
committed
MINOR: quic: simplify qc_prep_pkts() exit path
To prepare pacing support, qc_prep_pkts() exit path have been rewritten to be easily modified. This is purely refactoring which should not have any functional change : * a dedicated error path has been added * ensure qc_txb_store() is always called to finalize datagram on normal exit path if first_pkt is not NULL. Needed to support breaking from packet building loop in a easier way.
1 parent 9539f2b commit fbf5b18

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

src/quic_tx.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -533,12 +533,12 @@ static inline void qc_select_tls_ver(struct quic_conn *qc,
533533
static int qc_prep_pkts(struct quic_conn *qc, struct buffer *buf,
534534
struct list *qels)
535535
{
536-
int ret, cc, padding;
536+
int cc, padding;
537537
struct quic_tx_packet *first_pkt, *prv_pkt;
538538
unsigned char *end, *pos;
539539
uint32_t wrlen; /* may differ from dglen if GSO used */
540540
uint16_t dglen;
541-
size_t total;
541+
int total = 0;
542542
struct quic_enc_level *qel, *tmp_qel;
543543
uchar gso_dgram_cnt = 0;
544544

@@ -548,13 +548,11 @@ static int qc_prep_pkts(struct quic_conn *qc, struct buffer *buf,
548548
*/
549549
BUG_ON_HOT(buf->head || buf->data);
550550

551-
ret = -1;
552551
cc = qc->flags & QUIC_FL_CONN_IMMEDIATE_CLOSE;
553552
padding = 0;
554553
first_pkt = prv_pkt = NULL;
555554
end = pos = (unsigned char *)b_head(buf);
556555
dglen = wrlen = 0;
557-
total = 0;
558556

559557
list_for_each_entry_safe(qel, tmp_qel, qels, el_send) {
560558
struct quic_tls_ctx *tls_ctx;
@@ -668,7 +666,8 @@ static int qc_prep_pkts(struct quic_conn *qc, struct buffer *buf,
668666
}
669667

670668
if (err == QC_BUILD_PKT_ERR_ALLOC || err == QC_BUILD_PKT_ERR_ENCRYPT)
671-
goto leave;
669+
goto err;
670+
first_pkt = NULL;
672671
goto out;
673672
}
674673

@@ -703,10 +702,8 @@ static int qc_prep_pkts(struct quic_conn *qc, struct buffer *buf,
703702
BUG_ON(padding && !next_qel);
704703

705704
/* Build only one datagram when an immediate close is required. */
706-
if (cc) {
707-
qc_txb_store(buf, dglen, first_pkt);
705+
if (cc)
708706
goto out;
709-
}
710707

711708
/* Only one short packet by datagram when probing. */
712709
if (probe && qel == qc->ael)
@@ -753,20 +750,22 @@ static int qc_prep_pkts(struct quic_conn *qc, struct buffer *buf,
753750
TRACE_DEVEL("next encryption level", QUIC_EV_CONN_PHPKTS, qc);
754751
}
755752

753+
out:
756754
if (first_pkt)
757755
qc_txb_store(buf, wrlen, first_pkt);
758756

759-
out:
760757
if (cc && total) {
761758
BUG_ON(buf != &qc->tx.cc_buf);
762759
BUG_ON(dglen != total);
763760
qc->tx.cc_dgram_len = dglen;
764761
}
765762

766-
ret = total;
767-
leave:
768763
TRACE_LEAVE(QUIC_EV_CONN_PHPKTS, qc);
769-
return ret;
764+
return total;
765+
766+
err:
767+
TRACE_DEVEL("leaving on error", QUIC_EV_CONN_PHPKTS, qc);
768+
return -1;
770769
}
771770

772771
/* Encode frames and send them as packets for <qc> connection. Input frames are

0 commit comments

Comments
 (0)