On Sat, Jan 4, 2020 at 2:34 AM Stephen Hemminger <step...@networkplumber.org> wrote: > > When rte_eal_cleanup is called, free all the memory > associated with dynamic log levels and types. > > Fixes: c1b5fa94a46f ("eal: support dynamic log types") > Cc: olivier.m...@6wind.com > Signed-off-by: Stephen Hemminger <step...@networkplumber.org> > --- > lib/librte_eal/common/eal_common_log.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/lib/librte_eal/common/eal_common_log.c > b/lib/librte_eal/common/eal_common_log.c > index 64d6e20947ed..7583bdc57619 100644 > --- a/lib/librte_eal/common/eal_common_log.c > +++ b/lib/librte_eal/common/eal_common_log.c > @@ -470,8 +471,23 @@ eal_log_set_default(FILE *default_log) > void > eal_log_cleanup(void) > { > + struct rte_eal_opt_loglevel *opt_ll, *tmp; > + size_t i; > + > if (default_log_stream) { > fclose(default_log_stream); > default_log_stream = NULL; > } > + > + TAILQ_FOREACH_SAFE(opt_ll, &opt_loglevel_list, next, tmp) { > + free(opt_ll->pattern);
In regexp case, we have a leak on the regexp buffer. Fixed with: + if (opt_ll->pattern != NULL) + free(opt_ll->pattern); + else + regfree(&opt_ll->re_match); > + free(opt_ll); > + } > + > + for (i = 0; i < rte_logs.dynamic_types_len; i++) > + free(rte_logs.dynamic_types[i].name); > + > + rte_logs.dynamic_types_len = 0; > + free(rte_logs.dynamic_types); > + rte_logs.dynamic_types = NULL; > } > -- > 2.20.1 > -- David Marchand