From: Frédéric Lécaille Date: Fri, 16 Jul 2021 09:42:44 +0000 (+0200) Subject: MINOR: Add function for TX packets reference counting X-Git-Tag: v2.5-dev8~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b095252a232361469275c1fda665b6d00d529f6e;p=thirdparty%2Fhaproxy.git MINOR: Add function for TX packets reference counting Add two functions to encrement or decrement a referenc counter attached to TX packet structure (struct quic_tx_packet). The packet are freed when their counters reach the null value. --- diff --git a/include/haproxy/xprt_quic-t.h b/include/haproxy/xprt_quic-t.h index b5e7cad530..b83c34e6e8 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 92091778ff..57a565bd18 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,