The reorder drain test fails due to mempool corruption caused by freeing packet buffer twice.
Fixes: d0c9b58d7156 ("app/test: new reorder unit test") Signed-off-by: Pavan Nikhilesh <pbhagavat...@caviumnetworks.com> --- test/test/test_reorder.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/test/test/test_reorder.c b/test/test/test_reorder.c index 4ec22ac..51c2dcd 100644 --- a/test/test/test_reorder.c +++ b/test/test/test_reorder.c @@ -70,13 +70,15 @@ test_reorder_create(void) TEST_ASSERT((b == NULL) && (rte_errno == EINVAL), "No error on create() with NULL name"); - b = rte_reorder_create("PKT", rte_socket_id(), REORDER_BUFFER_SIZE_INVALID); + b = rte_reorder_create("PKT", rte_socket_id(), + REORDER_BUFFER_SIZE_INVALID); TEST_ASSERT((b == NULL) && (rte_errno == EINVAL), "No error on create() with invalid buffer size param."); b = rte_reorder_create("PKT_RO1", rte_socket_id(), REORDER_BUFFER_SIZE); TEST_ASSERT_EQUAL(b, test_params->b, - "New reorder instance created with already existing name"); + "New reorder instance created with already existing" + " name"); return 0; } @@ -88,8 +90,8 @@ test_reorder_init(void) unsigned int size; /* * The minimum memory area size that should be passed to library is, - * sizeof(struct rte_reorder_buffer) + (2 * size * sizeof(struct rte_mbuf *)); - * Otherwise error will be thrown + * sizeof(struct rte_reorder_buffer) + (2 * size * + * sizeof(struct rte_mbuf *)); Otherwise error will be thrown */ size = 100; @@ -189,15 +191,16 @@ test_reorder_insert(void) for (i = 0; i < size; i++) { ret = rte_reorder_insert(b, bufs[i]); if (ret != 0) { - printf("%s:%d: Error inserting packet with seqn less than size\n", + printf("%s:%d: Error inserting packet with seqn less" + " than size\n", __func__, __LINE__); ret = -1; goto exit; } } - /* early packet - should move mbufs to ready buf and move sequence window - * reorder_seq = 4 + /* early packet - should move mbufs to ready buf and move sequence + * window reorder_seq = 4 * RB[] = {0, 1, 2, 3} * OB[] = {4, NULL, NULL, NULL} */ @@ -208,12 +211,14 @@ test_reorder_insert(void) ret = -1; goto exit; } + i++; /* early packet from current sequence window - full ready buffer */ bufs[5]->seqn = 2 * size; ret = rte_reorder_insert(b, bufs[5]); if (!((ret == -1) && (rte_errno == ENOSPC))) { - printf("%s:%d: No error inserting early packet with full ready buffer\n", + printf("%s:%d: No error inserting early packet with full ready" + " buffer\n", __func__, __LINE__); ret = -1; goto exit; @@ -231,7 +236,7 @@ test_reorder_insert(void) ret = 0; exit: - rte_mempool_put_bulk(p, (void *)bufs, num_bufs); + rte_mempool_put_bulk(p, (void **)&bufs[i], num_bufs - i); rte_reorder_free(b); return ret; } @@ -360,6 +365,13 @@ test_setup(void) return 0; } +static void +test_destroy(void) +{ + rte_mempool_free(test_params->p); + test_params->p = NULL; +} + static struct unit_test_suite reorder_test_suite = { .setup = test_setup, @@ -372,7 +384,8 @@ static struct unit_test_suite reorder_test_suite = { TEST_CASE(test_reorder_insert), TEST_CASE(test_reorder_drain), TEST_CASES_END() - } + }, + .teardown = test_destroy }; static int -- 2.7.4