Em Mon, Jul 04, 2016 at 04:01:37PM +0200, Jiri Olsa escreveu: > It's better to release the hist_entry object in > hist_entry__new function (where it's allocated) > rather than in hist_entry__init.
Please combine this with the previous patch, that way this all gets clearer :-\ - Arnaldo > Link: http://lkml.kernel.org/n/tip-uoatzgsbdk3ebaeu56kdb...@git.kernel.org > Signed-off-by: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/util/hist.c | 13 ++++++------- > 1 file changed, 6 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c > index ed7bea9aa68d..04f3b52a319c 100644 > --- a/tools/perf/util/hist.c > +++ b/tools/perf/util/hist.c > @@ -360,10 +360,8 @@ static int hist_entry__init(struct hist_entry *he, > > if (symbol_conf.cumulate_callchain) { > he->stat_acc = malloc(sizeof(he->stat)); > - if (he->stat_acc == NULL) { > - free(he); > + if (he->stat_acc == NULL) > return -ENOMEM; > - } > memcpy(he->stat_acc, &he->stat, sizeof(he->stat)); > if (!sample_self) > memset(&he->stat, 0, sizeof(he->stat)); > @@ -381,7 +379,6 @@ static int hist_entry__init(struct hist_entry *he, > if (he->branch_info == NULL) { > map__zput(he->ms.map); > free(he->stat_acc); > - free(he); > return -ENOMEM; > } > > @@ -415,7 +412,6 @@ static int hist_entry__init(struct hist_entry *he, > map__put(he->mem_info->daddr.map); > } > free(he->stat_acc); > - free(he); > return -ENOMEM; > } > } > @@ -439,10 +435,13 @@ static struct hist_entry *hist_entry__new(struct > hist_entry *template, > callchain_size = sizeof(struct callchain_root); > > he = zalloc(sizeof(*he) + callchain_size); > - if (he) > + if (he) { > err = hist_entry__init(he, template, sample_self); > + if (err) > + zfree(&he); > + } > > - return err ? NULL : he; > + return he; > } > > static u8 symbol__parent_filter(const struct symbol *parent) > -- > 2.4.11