> From: Varghese, Vipin > Sent: Sunday, December 31, 2017 2:46 PM > To: dev@dpdk.org; Van Haaren, Harry <harry.van.haa...@intel.com> > Cc: Jain, Deepak K <deepak.k.j...@intel.com>; Varghese, Vipin > <vipin.vargh...@intel.com> > Subject: [PATCH v1] service: fix memory leak by rte_service_init > > This patch fixes the memory leak created by rte_service_init, when > run from secondary application. Running secondary application which > shares the huge page memory from primary multiple times causes memory > to be initialized but not free when application exit. > > The rte_service_deinit check if the service is initialized. If yes, it > frees up rte_services & lcore_states. The API has to be called at end of > application run. > > Signed-off-by: Vipin Varghese <vipin.vargh...@intel.com>
<snip> > +++ b/lib/librte_eal/common/rte_service.c > @@ -98,6 +98,20 @@ struct core_state { > static struct core_state *lcore_states; > static uint32_t rte_service_library_initialized; > > +void rte_service_deinit(void) > +{ > + if (rte_service_library_initialized) { > + if (rte_services) > + rte_free(rte_services); > + if (lcore_states) > + rte_free(lcore_states); > + > + rte_service_library_initialized = 0; > + } > + return; > +} No return required from void functions > + > + > int32_t rte_service_init(void) > { > if (rte_service_library_initialized) { > diff --git a/lib/librte_eal/rte_eal_version.map > b/lib/librte_eal/rte_eal_version.map > index f4f46c1..0f14409 100644 > --- a/lib/librte_eal/rte_eal_version.map > +++ b/lib/librte_eal/rte_eal_version.map > @@ -234,5 +234,6 @@ EXPERIMENTAL { > rte_service_set_runstate_mapped_check; > rte_service_set_stats_enable; > rte_service_start_with_defaults; > + rte_service_deinit; Alphabetical ordering in the .map files (vim has a nice feature; visual select service functions then :sort ) With above changes; Acked-by: Harry van Haaren <harry.van.haa...@intel.com>