From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752502AbdLAAWh (ORCPT ); Thu, 30 Nov 2017 19:22:37 -0500 Received: from mga04.intel.com ([192.55.52.120]:10613 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752270AbdLAAWe (ORCPT ); Thu, 30 Nov 2017 19:22:34 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,343,1508828400"; d="scan'208";a="7821059" Subject: Re: [PATCH v4 01/12] perf util: Create rblist__reset() function To: Arnaldo Carvalho de Melo Cc: jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org, ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com References: <1512043002-26099-1-git-send-email-yao.jin@linux.intel.com> <1512043002-26099-2-git-send-email-yao.jin@linux.intel.com> <20171130193022.GT3298@kernel.org> From: "Jin, Yao" Message-ID: <2243fbe2-d495-828a-30c8-8059fc6bd17a@linux.intel.com> Date: Fri, 1 Dec 2017 08:22:32 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171130193022.GT3298@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/1/2017 3:30 AM, Arnaldo Carvalho de Melo wrote: > Em Thu, Nov 30, 2017 at 07:56:31PM +0800, Jin Yao escreveu: >> Currently we have a rblist__delete() which is used to delete a rblist. >> While rblist__delete() will free the pointer of rblist at the end. >> >> It's inconvenience for user to delete a rblist which is not allocated >> by something like malloc(). For example, the rblist is defined in a >> data structure. > >> This patch creates a new function rblist__reset() which function is >> similar as rblist__delete() but it will not free the rblist. > > So, we've been using, mostly consistently: > > int foo__init(struct foo *foo) > { > foo->a = 1; > foo->b = malloc(10); > if (foo->b == NULL) > return -1; > return 0; > } > > struct foo *foo__new(parameters) > { > struct foo *foo = zalloc(sizeof(*foo)); > > if (foo && foo__init(foo)) > goto out_delete; > > return foo; > out_delete: > foo__delete(foo); > return NULL); > } > > void foo__exit(struct foo *foo) > { > zfree(&foo->b); > } > > void foo__delete(struct foo *foo) > { > if (!foo) > return; > > foo__exit(foo); > free(foo); > } > > So, please use delete+exit and new+init, i.e. replace 'reset' with > 'exit' and 'free' with 'delete' (I saw this case in another patch), for > us to try and make all this more consistent, ok? > > Thanks, > > - Arnaldo > Hi Arnaldo, I will update the patch to make it more consistent. Thanks Jin Yao >> Signed-off-by: Jin Yao >> --- >> tools/perf/util/rblist.c | 24 +++++++++++++++++------- >> tools/perf/util/rblist.h | 1 + >> 2 files changed, 18 insertions(+), 7 deletions(-) >> >> diff --git a/tools/perf/util/rblist.c b/tools/perf/util/rblist.c >> index 0dfe27d..eafa663 100644 >> --- a/tools/perf/util/rblist.c >> +++ b/tools/perf/util/rblist.c >> @@ -101,20 +101,30 @@ void rblist__init(struct rblist *rblist) >> return; >> } >> >> +static void remove_nodes(struct rblist *rblist) >> +{ >> + struct rb_node *pos, *next = rb_first(&rblist->entries); >> + >> + while (next) { >> + pos = next; >> + next = rb_next(pos); >> + rblist__remove_node(rblist, pos); >> + } >> +} >> + >> void rblist__delete(struct rblist *rblist) >> { >> if (rblist != NULL) { >> - struct rb_node *pos, *next = rb_first(&rblist->entries); >> - >> - while (next) { >> - pos = next; >> - next = rb_next(pos); >> - rblist__remove_node(rblist, pos); >> - } >> + remove_nodes(rblist); >> free(rblist); >> } >> } >> >> +void rblist__reset(struct rblist *rblist) >> +{ >> + remove_nodes(rblist); >> +} >> + >> struct rb_node *rblist__entry(const struct rblist *rblist, unsigned int idx) >> { >> struct rb_node *node; >> diff --git a/tools/perf/util/rblist.h b/tools/perf/util/rblist.h >> index 4c8638a..048c285 100644 >> --- a/tools/perf/util/rblist.h >> +++ b/tools/perf/util/rblist.h >> @@ -35,6 +35,7 @@ void rblist__remove_node(struct rblist *rblist, struct rb_node *rb_node); >> struct rb_node *rblist__find(struct rblist *rblist, const void *entry); >> struct rb_node *rblist__findnew(struct rblist *rblist, const void *entry); >> struct rb_node *rblist__entry(const struct rblist *rblist, unsigned int idx); >> +void rblist__reset(struct rblist *rblist); >> >> static inline bool rblist__empty(const struct rblist *rblist) >> { >> -- >> 2.7.4