quic_frame is the type used to represent frames emitted in a QUIC Tx
packet. Each frame is attached to a packet, and can also be linked to
other frames from the the same packet, or duplicated frames for
retransmission. As such, quic_frame free operation is a tedious process.
qc_release_frm() has been implemented to ensure quic_frame is always
properly freed after detaching from all its list attach point. One
particular point is to ensure that when a frame is released, the frame
origin and all origin copies, including the current <frm> are flagged as
acked and detached from the reflist. Add a BUG_ON() to ensure this loop
is properly conducted when dealing with the current <frm> instance.
uint64_t pn;
struct quic_frame *origin, *f, *tmp;
+ /* <frm> will be detached from its Tx packet via origin->reflist loop
+ * implemented below. It is thus expected that its pkt field is not
+ * NULL or else it may free the frame too soon.
+ */
+ BUG_ON(!frm->pkt);
+
TRACE_ENTER(QUIC_EV_CONN_PRSAFRM, qc, frm);
/* Identify this frame: a frame copy or one of its copies */