[dpdk-dev] [PATCH v1] service: fix memory leak by rte_service_init

Bruce Richardson bruce.richardson at intel.com
Mon Jan 8 15:40:11 CET 2018


On Mon, Jan 08, 2018 at 10:17:14AM +0000, Van Haaren, Harry wrote:
> > From: Varghese, Vipin
> > Sent: Sunday, December 31, 2017 2:46 PM
> > To: dev at dpdk.org; Van Haaren, Harry <harry.van.haaren at intel.com>
> > Cc: Jain, Deepak K <deepak.k.jain at intel.com>; Varghese, Vipin
> > <vipin.varghese at 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.varghese at 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.haaren at intel.com>

Is the opposite of init not "uninit" rather than "deinit"?
Alternatively, "finalize" could be used as the opposite of "initialize",
which would be close to ".init" and ".fini" as used in ELF files.

/Bruce


More information about the dev mailing list