diff --git a/include/haproxy/xprt_quic-t.h b/include/haproxy/xprt_quic-t.h index b5e7cad53..b83c34e6e 100644 --- a/include/haproxy/xprt_quic-t.h +++ b/include/haproxy/xprt_quic-t.h @@ -482,6 +482,8 @@ struct quic_tx_packet { struct quic_pktns *pktns; /* Flags. */ unsigned int flags; + /* Reference counter */ + int refcnt; /* Next packet in the same datagram */ struct quic_tx_packet *next; }; diff --git a/include/haproxy/xprt_quic.h b/include/haproxy/xprt_quic.h index 92091778f..57a565bd1 100644 --- a/include/haproxy/xprt_quic.h +++ b/include/haproxy/xprt_quic.h @@ -1064,6 +1064,19 @@ static inline void free_quic_rx_packet(struct quic_rx_packet *pkt) quic_rx_packet_refdec(pkt); } +/* Increment the reference counter of */ +static inline void quic_tx_packet_refinc(struct quic_tx_packet *pkt) +{ + HA_ATOMIC_ADD(&pkt->refcnt, 1); +} + +/* Decrement the reference counter of */ +static inline void quic_tx_packet_refdec(struct quic_tx_packet *pkt) +{ + if (!HA_ATOMIC_SUB_FETCH(&pkt->refcnt, 1)) + pool_free(pool_head_quic_tx_packet, pkt); +} + ssize_t quic_lstnr_dgram_read(char *buf, size_t len, void *owner, struct sockaddr_storage *saddr); ssize_t quic_srv_dgram_read(char *buf, size_t len, void *owner,