[dpdk-dev] [PATCH v2] mbuf: use refcnt = 0 when debugging
Radu Nicolau
radu.nicolau at intel.com
Mon Sep 4 16:27:55 CEST 2017
On 8/7/2017 5:11 PM, Charles (Chas) Williams wrote:
> After commit 8f094a9ac5d7 ("mbuf: set mbuf fields while in pool") is it
> much harder to detect a "double free". If the developer makes a copy
> of an mbuf pointer and frees it twice, this condition is never detected
> and the mbuf gets returned to the pool twice.
>
> Since this requires extra work to track, make this behavior conditional
> on CONFIG_RTE_LIBRTE_MBUF_DEBUG.
>
> Signed-off-by: Chas Williams <ciwillia at brocade.com>
> ---
>
> @@ -1304,10 +1329,13 @@ rte_pktmbuf_prefree_seg(struct rte_mbuf *m)
> m->next = NULL;
> m->nb_segs = 1;
> }
> +#ifdef RTE_LIBRTE_MBUF_DEBUG
> + rte_mbuf_refcnt_set(m, RTE_MBUF_UNUSED_CNT);
> +#endif
>
> return m;
>
> - } else if (rte_atomic16_add_return(&m->refcnt_atomic, -1) == 0) {
> + } else if (rte_mbuf_refcnt_update(m, -1) == 0) {
Why replace the use of atomic operation?
>
>
> if (RTE_MBUF_INDIRECT(m))
> @@ -1317,7 +1345,7 @@ rte_pktmbuf_prefree_seg(struct rte_mbuf *m)
> m->next = NULL;
> m->nb_segs = 1;
> }
> - rte_mbuf_refcnt_set(m, 1);
> + rte_mbuf_refcnt_set(m, RTE_MBUF_UNUSED_CNT);
>
> return m;
> }
Reviewed-by: Radu Nicolau <radu.nicolau at intel.com>
More information about the dev
mailing list