service: fix memory leak with new function

The rte_service_finalize routine checks if service is initialized
or not. If yes; releases internal memory for services and lcore
states are freed. This routine is to be invoked at end of application
termination.

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

Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
This commit is contained in:
Vipin Varghese 2018-01-27 02:25:36 +05:30 committed by Thomas Monjalon
parent 01aa0d95c8
commit da23f0aa87
3 changed files with 26 additions and 0 deletions

View File

@ -429,6 +429,17 @@ int32_t rte_service_attr_get(uint32_t id, uint32_t attr_id,
*/
int32_t rte_service_attr_reset_all(uint32_t id);
/**
* @warning
* @b EXPERIMENTAL: this API may change without prior notice
*
* Free up the memory that has been initialized. This routine
* is to be invoked prior to process termination.
*
* @retval None
*/
void rte_service_finalize(void);
#ifdef __cplusplus
}
#endif

View File

@ -114,6 +114,20 @@ fail_mem:
return -ENOMEM;
}
void rte_service_finalize(void)
{
if (!rte_service_library_initialized)
return;
if (rte_services)
rte_free(rte_services);
if (lcore_states)
rte_free(lcore_states);
rte_service_library_initialized = 0;
}
/* returns 1 if service is registered and has not been unregistered
* Returns 0 if service never registered, or has been unregistered
*/

View File

@ -223,6 +223,7 @@ EXPERIMENTAL {
rte_service_component_unregister;
rte_service_component_runstate_set;
rte_service_dump;
rte_service_finalize;
rte_service_get_by_id;
rte_service_get_by_name;
rte_service_get_count;