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 <ciwil...@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.nico...@intel.com>

Reply via email to