[dpdk-stable] [PATCH v2 1/2] test/mempool_perf: Free mempool on exit
Olivier Matz
olivier.matz at 6wind.com
Fri Apr 7 17:51:02 CEST 2017
Hi Santosh,
On Thu, 6 Apr 2017 12:15:48 +0530, Santosh Shukla <santosh.shukla at caviumnetworks.com> wrote:
> Mempool_perf test not freeing pool memory.
>
> Cc: stable at dpdk.org
> Signed-off-by: Santosh Shukla <santosh.shukla at caviumnetworks.com>
> Acked-by: Shreyansh Jain <shreyansh.jain at 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
More information about the stable
mailing list