Messages in this thread | | | Subject | Re: [PATCH v4 01/12] perf util: Create rblist__reset() function | From | "Jin, Yao" <> | Date | Fri, 1 Dec 2017 08:22:32 +0800 |
| |
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 <yao.jin@linux.intel.com> >> --- >> 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
| |