From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750961AbdK3Ta0 (ORCPT ); Thu, 30 Nov 2017 14:30:26 -0500 Received: from mail.kernel.org ([198.145.29.99]:33590 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750760AbdK3TaZ (ORCPT ); Thu, 30 Nov 2017 14:30:25 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2583C214EF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=acme@kernel.org Date: Thu, 30 Nov 2017 16:30:22 -0300 From: Arnaldo Carvalho de Melo To: Jin Yao 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 Subject: Re: [PATCH v4 01/12] perf util: Create rblist__reset() function Message-ID: <20171130193022.GT3298@kernel.org> References: <1512043002-26099-1-git-send-email-yao.jin@linux.intel.com> <1512043002-26099-2-git-send-email-yao.jin@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1512043002-26099-2-git-send-email-yao.jin@linux.intel.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.9.1 (2017-09-22) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > 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