From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754002AbcGDOBt (ORCPT ); Mon, 4 Jul 2016 10:01:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42922 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753414AbcGDOBq (ORCPT ); Mon, 4 Jul 2016 10:01:46 -0400 From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: lkml , David Ahern , Ingo Molnar , Namhyung Kim , Peter Zijlstra Subject: [PATCH 2/4] perf tools: Do the error path hist_entry release in hist_entry__new Date: Mon, 4 Jul 2016 16:01:37 +0200 Message-Id: <1467640899-3776-3-git-send-email-jolsa@kernel.org> In-Reply-To: <1467640899-3776-1-git-send-email-jolsa@kernel.org> References: <1467640899-3776-1-git-send-email-jolsa@kernel.org> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Mon, 04 Jul 2016 14:01:46 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It's better to release the hist_entry object in hist_entry__new function (where it's allocated) rather than in hist_entry__init. Link: http://lkml.kernel.org/n/tip-uoatzgsbdk3ebaeu56kdb9ku@git.kernel.org Signed-off-by: Jiri Olsa --- 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