From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751333AbbGAE6f (ORCPT ); Wed, 1 Jul 2015 00:58:35 -0400 Received: from mail-pa0-f44.google.com ([209.85.220.44]:34242 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750715AbbGAE62 (ORCPT ); Wed, 1 Jul 2015 00:58:28 -0400 Message-ID: <5593736F.7050506@gmail.com> Date: Wed, 01 Jul 2015 13:58:23 +0900 From: taeung User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Arnaldo Carvalho de Melo CC: linux-kernel@vger.kernel.org, jolsa@redhat.com, namhyung@kernel.org, Ingo Molnar Subject: Re: [PATCH v2 4/5] perf mem: Fill in the missing freeing a session after an error occur References: <1435677525-28055-1-git-send-email-treeze.taeung@gmail.com> <1435677525-28055-2-git-send-email-treeze.taeung@gmail.com> <20150630195749.GA3226@kernel.org> In-Reply-To: <20150630195749.GA3226@kernel.org> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/01/2015 04:57 AM, Arnaldo Carvalho de Melo wrote: > Em Wed, Jul 01, 2015 at 12:18:45AM +0900, Taeung Song escreveu: >> When an error occur a error value is just returned >> without freeing the session. So allocating and freeing >> session have to be matched as a pair even if an error occur. >> >> Signed-off-by: Taeung Song >> --- >> tools/perf/builtin-mem.c | 18 ++++++++---------- >> 1 file changed, 8 insertions(+), 10 deletions(-) >> >> diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c >> index da2ec06..a914ef7 100644 >> --- a/tools/perf/builtin-mem.c >> +++ b/tools/perf/builtin-mem.c >> @@ -124,7 +124,6 @@ static int report_raw_events(struct perf_mem *mem) >> .mode = PERF_DATA_MODE_READ, >> .force = mem->force, >> }; >> - int err = -EINVAL; >> int ret; >> struct perf_session *session = perf_session__new(&file, false, >> &mem->tool); >> @@ -135,24 +134,23 @@ static int report_raw_events(struct perf_mem *mem) >> if (mem->cpu_list) { >> ret = perf_session__cpu_bitmap(session, mem->cpu_list, >> mem->cpu_bitmap); >> - if (ret) >> + if (ret) { >> + ret = -EINVAL; > Why not propagate perf_session__cpu_bitmap() return, this function > wasn't being consistent in returning errors, neither was you, as, see > below... perf_session__cpu_bitmap() when an error occurs in this function, a error value which is -1 is returned. Therefore, this conditional sentence 'if (ret)' have to be changed to 'if (ret < 0)' as below. - if (ret) + if (ret < 0) goto out_delete; Is it what you say ? -- Thanks, Taeung > >> goto out_delete; >> + } >> } >> >> - if (symbol__init(&session->header.env) < 0) >> - return -1; >> + ret = symbol__init(&session->header.env); >> + if (ret < 0) >> + goto out_delete; > Here you decided to propagate symbol__init() error return. :-) > > I applied all the others, including the 3/5 v2 one. > > Thanks, > > - Arnaldo > >> >> printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n"); >> >> - err = perf_session__process_events(session); >> - if (err) >> - return err; >> - >> - return 0; >> + ret = perf_session__process_events(session); >> >> out_delete: >> perf_session__delete(session); >> - return err; >> + return ret; >> } >> >> static int report_events(int argc, const char **argv, struct perf_mem *mem) >> -- >> 1.9.1