service: fix possible mem leak on initialize

This commit ensures that if that if we run out of memory
during the initialization of the service library, that the
first allocated memory is correctly freed instead of leaked.

Fixes: 21698354c832 ("service: introduce service cores concept")
Cc: stable@dpdk.org

Reported-by: Vipin Varghese <vipin.varghese@intel.com>
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
This commit is contained in:
Harry van Haaren 2018-01-24 17:02:47 +00:00 committed by Thomas Monjalon
parent 9d46f3bbc8
commit da9ac508c3

View File

@ -82,14 +82,14 @@ int32_t rte_service_init(void)
RTE_CACHE_LINE_SIZE);
if (!rte_services) {
printf("error allocating rte services array\n");
return -ENOMEM;
goto fail_mem;
}
lcore_states = rte_calloc("rte_service_core_states", RTE_MAX_LCORE,
sizeof(struct core_state), RTE_CACHE_LINE_SIZE);
if (!lcore_states) {
printf("error allocating core states array\n");
return -ENOMEM;
goto fail_mem;
}
int i;
@ -106,6 +106,12 @@ int32_t rte_service_init(void)
rte_service_library_initialized = 1;
return 0;
fail_mem:
if (rte_services)
rte_free(rte_services);
if (lcore_states)
rte_free(lcore_states);
return -ENOMEM;
}
/* returns 1 if service is registered and has not been unregistered