diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 4eb4d2408..b1ffc12fc 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -1484,6 +1484,7 @@ static inline void qc_treat_acked_tx_frm(struct quic_conn *qc, struct quic_frame *frm) { int stream_acked; + uint64_t pn; TRACE_PROTO("Removing frame", QUIC_EV_CONN_PRSAFRM, qc, frm); stream_acked = 0; @@ -1507,7 +1508,10 @@ static inline void qc_treat_acked_tx_frm(struct quic_conn *qc, if (!node) { TRACE_PROTO("acked stream for released stream", QUIC_EV_CONN_ACKSTRM, qc, strm_frm); LIST_DELETE(&frm->list); + pn = frm->pkt->pn_node.key; quic_tx_packet_refdec(frm->pkt); + TRACE_PROTO("freeing frame from packet", + QUIC_EV_CONN_PRSAFRM, qc, frm, &pn); pool_free(pool_head_quic_frame, frm); /* early return */ @@ -1527,13 +1531,19 @@ static inline void qc_treat_acked_tx_frm(struct quic_conn *qc, /* no need to continue if stream freed. */ TRACE_PROTO("stream released and freed", QUIC_EV_CONN_ACKSTRM, qc); LIST_DELETE(&frm->list); + pn = frm->pkt->pn_node.key; quic_tx_packet_refdec(frm->pkt); + TRACE_PROTO("freeing frame from packet", + QUIC_EV_CONN_PRSAFRM, qc, frm, &pn); pool_free(pool_head_quic_frame, frm); break; } LIST_DELETE(&frm->list); + pn = frm->pkt->pn_node.key; quic_tx_packet_refdec(frm->pkt); + TRACE_PROTO("freeing frame from packet", + QUIC_EV_CONN_PRSAFRM, qc, frm, &pn); pool_free(pool_head_quic_frame, frm); } else { @@ -1545,7 +1555,10 @@ static inline void qc_treat_acked_tx_frm(struct quic_conn *qc, break; default: LIST_DELETE(&frm->list); + pn = frm->pkt->pn_node.key; quic_tx_packet_refdec(frm->pkt); + TRACE_PROTO("freeing frame from packet", + QUIC_EV_CONN_PRSAFRM, qc, frm, &pn); pool_free(pool_head_quic_frame, frm); }