Messages in this thread Patch in this message | | | Date | Fri, 30 Jan 2015 15:46:32 +0100 | From | Jiri Olsa <> | Subject | [PATCHv3] tools lib traceevent: Add priv field to struct format_field |
| |
On Fri, Jan 30, 2015 at 03:24:47PM +0100, Jiri Olsa wrote: > On Fri, Jan 30, 2015 at 09:17:19AM -0500, Steven Rostedt wrote: > > On Mon, 26 Jan 2015 18:38:23 +0800 > > Wang Nan <wangnan0@huawei.com> wrote: > > > > > > > diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c > > > index cf3a44b..5f76003 100644 > > > --- a/tools/lib/traceevent/event-parse.c > > > +++ b/tools/lib/traceevent/event-parse.c > > > @@ -5909,6 +5909,8 @@ static void free_format_fields(struct format_field *field) > > > free(field->type); > > > free(field->name); > > > free(field); > > > + if (field->destroy_priv) > > > + field->destroy_priv(field); > > > > I think you want to call field->destroy_priv() *before* you free field. > > argh.. missed that :-\ will fix >
fixed version
jirka
--- From: Wang Nan <wangnan0@huawei.com>
Introduce a priv field to 'struct format_field' for futher expansion.
(In https://lkml.org/lkml/2015/1/21/383 , Jiri Olsa gives a suggestion about changing lib traceevent to solve a bug of perf-convert-to-ctf, which is related to duplicated field names. I think his suggestion should be something like this patch. )
Signed-off-by: Wang Nan <wangnan0@huawei.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Tom Zanussi <tzanussi@gmail.com> [ moved field release after destroy callback call ] Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/lib/traceevent/event-parse.c | 2 ++ tools/lib/traceevent/event-parse.h | 2 ++ 2 files changed, 4 insertions(+)
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index afe20ed9fac8..64d40b7e0582 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c @@ -6236,6 +6236,8 @@ static void free_format_fields(struct format_field *field) next = field->next; free(field->type); free(field->name); + if (field->destroy_priv) + field->destroy_priv(field); free(field); field = next; } diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h index 7a3873ff9a4f..928d801444ab 100644 --- a/tools/lib/traceevent/event-parse.h +++ b/tools/lib/traceevent/event-parse.h @@ -190,6 +190,8 @@ struct format_field { unsigned int arraylen; unsigned int elementsize; unsigned long flags; + void *priv; + void (*destroy_priv)(struct format_field *); }; struct format { -- 1.9.3
| |