Hi Santosh, On Thu, 6 Apr 2017 12:15:48 +0530, Santosh Shukla <santosh.shu...@caviumnetworks.com> wrote: > Mempool_perf test not freeing pool memory. > > Cc: sta...@dpdk.org > Signed-off-by: Santosh Shukla <santosh.shu...@caviumnetworks.com> > Acked-by: Shreyansh Jain <shreyansh.j...@nxp.com> > --- > v1 --> v2: > * Fixed patch context > > test/test/test_mempool_perf.c | 31 +++++++++++++++++++------------ > 1 file changed, 19 insertions(+), 12 deletions(-) > > diff --git a/test/test/test_mempool_perf.c b/test/test/test_mempool_perf.c > index ebf1721ac..3c45971ab 100644 > --- a/test/test/test_mempool_perf.c > +++ b/test/test/test_mempool_perf.c > @@ -312,6 +312,8 @@ do_one_mempool_test(unsigned cores) > static int > test_mempool_perf(void) > { > + int ret = -1; > + > rte_atomic32_init(&synchro); > > /* create a mempool (without cache) */ > @@ -322,7 +324,7 @@ test_mempool_perf(void) > my_obj_init, NULL, > SOCKET_ID_ANY, 0); > if (mp_nocache == NULL) > - return -1; > + goto err; > > /* create a mempool (with cache) */ > if (mp_cache == NULL)
[...] > > - return 0; > + ret = 0; > + > +err: > + rte_mempool_free(mp_cache); > + rte_mempool_free(mp_nocache); > + return ret; Since mp_cache and mp_nocache are global variables, this won't work properly due to the way mempool are created: /* create a mempool (without cache) */ if (mp_nocache == NULL) mp_nocache = rte_mempool_create("perf_test_nocache", MEMPOOL_SIZE, MEMPOOL_ELT_SIZE, 0, 0, NULL, NULL, my_obj_init, NULL, SOCKET_ID_ANY, 0); The if() should be removed, else we'll have a use after free the next time. If you want to do more clean-up, you can try to remove the global variables, but it's maybe harder. Thanks, Olivier