aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2015-03-24 09:57:50 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-03-24 11:11:19 -0400
commit99ad1417db2e83530b88e3eff1a40285d6ebfee9 (patch)
tree20e1f266226b4cef56283c5c1a6a0b5799d467b2 /tools
parentdeab6f55a2fe6fe044af61c9aad6a8e90cda6499 (diff)
tools lib traceevent: Copy trace_clock and free it
The pevent->trace_clock should not be a direct pointer to what was given. It should be copied and freed. Note, valgrind pointed this out when a caller passed in a pointer that needed to be freed and it never was. Ideally, pevent should copy it (which this change does), and free the copy. It's up to the caller to free the clock string passed in. Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20150324135922.695906738@goodmis.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/lib/traceevent/event-parse.c10
-rw-r--r--tools/lib/traceevent/event-parse.h2
2 files changed, 9 insertions, 3 deletions
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 31d4e7da191c..e71c472d6a81 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -321,9 +321,14 @@ int pevent_register_comm(struct pevent *pevent, const char *comm, int pid)
321 return 0; 321 return 0;
322} 322}
323 323
324void pevent_register_trace_clock(struct pevent *pevent, char *trace_clock) 324int pevent_register_trace_clock(struct pevent *pevent, const char *trace_clock)
325{ 325{
326 pevent->trace_clock = trace_clock; 326 pevent->trace_clock = strdup(trace_clock);
327 if (!pevent->trace_clock) {
328 errno = ENOMEM;
329 return -1;
330 }
331 return 0;
327} 332}
328 333
329struct func_map { 334struct func_map {
@@ -6352,6 +6357,7 @@ void pevent_free(struct pevent *pevent)
6352 free_handler(handle); 6357 free_handler(handle);
6353 } 6358 }
6354 6359
6360 free(pevent->trace_clock);
6355 free(pevent->events); 6361 free(pevent->events);
6356 free(pevent->sort_events); 6362 free(pevent->sort_events);
6357 6363
diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h
index 6abda54d76f2..84e554f84574 100644
--- a/tools/lib/traceevent/event-parse.h
+++ b/tools/lib/traceevent/event-parse.h
@@ -599,7 +599,7 @@ enum trace_flag_type {
599}; 599};
600 600
601int pevent_register_comm(struct pevent *pevent, const char *comm, int pid); 601int pevent_register_comm(struct pevent *pevent, const char *comm, int pid);
602void pevent_register_trace_clock(struct pevent *pevent, char *trace_clock); 602int pevent_register_trace_clock(struct pevent *pevent, const char *trace_clock);
603int pevent_register_function(struct pevent *pevent, char *name, 603int pevent_register_function(struct pevent *pevent, char *name,
604 unsigned long long addr, char *mod); 604 unsigned long long addr, char *mod);
605int pevent_register_print_string(struct pevent *pevent, const char *fmt, 605int pevent_register_print_string(struct pevent *pevent, const char *fmt,