diff options
author | Namhyung Kim <namhyung.kim@lge.com> | 2013-03-21 03:18:48 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-03-21 12:30:52 -0400 |
commit | 3dce2ce3cc40ece2562a5a83e879b4bfb451476c (patch) | |
tree | b066d350c037448be3e4b33866caea190f4f00be /tools/perf/util/header.c | |
parent | 7f42b9505aee3fa9cb465a670989e3d426a1f3f2 (diff) |
perf tools: Handle failure case in trace_report()
If pevent allocation in read_trace_init() fails, trace_report() will
return -1 and *ppevent is set to NULL. Its callers should check this
case and handle it properly.
This is also a preparation for the removal of *die() calls.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1363850332-25297-6-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/header.c')
-rw-r--r-- | tools/perf/util/header.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 79e48c726938..326068a593a5 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -1670,8 +1670,8 @@ static int process_tracing_data(struct perf_file_section *section __maybe_unused | |||
1670 | struct perf_header *ph __maybe_unused, | 1670 | struct perf_header *ph __maybe_unused, |
1671 | int fd, void *data) | 1671 | int fd, void *data) |
1672 | { | 1672 | { |
1673 | trace_report(fd, data, false); | 1673 | ssize_t ret = trace_report(fd, data, false); |
1674 | return 0; | 1674 | return ret < 0 ? -1 : 0; |
1675 | } | 1675 | } |
1676 | 1676 | ||
1677 | static int process_build_id(struct perf_file_section *section, | 1677 | static int process_build_id(struct perf_file_section *section, |
@@ -2750,6 +2750,11 @@ static int perf_evsel__prepare_tracepoint_event(struct perf_evsel *evsel, | |||
2750 | if (evsel->tp_format) | 2750 | if (evsel->tp_format) |
2751 | return 0; | 2751 | return 0; |
2752 | 2752 | ||
2753 | if (pevent == NULL) { | ||
2754 | pr_debug("broken or missing trace data\n"); | ||
2755 | return -1; | ||
2756 | } | ||
2757 | |||
2753 | event = pevent_find_event(pevent, evsel->attr.config); | 2758 | event = pevent_find_event(pevent, evsel->attr.config); |
2754 | if (event == NULL) | 2759 | if (event == NULL) |
2755 | return -1; | 2760 | return -1; |