summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorStephane Eranian <eranian@google.com>2011-06-07 18:19:36 +0200
committerArnaldo Carvalho de Melo <acme@redhat.com>2011-08-18 07:20:31 -0300
commitcc2d86b04d9ac28a6be6cb05da6ea8f014fd5aa0 (patch)
treea6111ef0349b82b982a504f633c0d820f0c95ae7 /tools
parent77e57297b4ff3f602ba5105398d342a4b4a54774 (diff)
downloadlwn-cc2d86b04d9ac28a6be6cb05da6ea8f014fd5aa0.tar.gz
lwn-cc2d86b04d9ac28a6be6cb05da6ea8f014fd5aa0.zip
perf evlist: Fix missing event name init for default event
When no event is given to perf record, perf top, a default event is initialized (cycles). However, perf_evlist__add_default() was not setting the symbolic name for the event. Perf top worked simply because it was reconstructing the name from the event code. But it should not have to do this. This patch initializes the evsel->name field properly. This second version improves the code flow on the non error path. Cc: Ingo Molnar <mingo@elte.hu> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20110607161936.GA8163@quad Signed-off-by: Stephane Eranian <eranian@google.com> [committer note: Use perf_evsel__delete() instead of plain free()] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/evlist.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index e03e7bc8205e..c12bd476c6f7 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -85,10 +85,19 @@ int perf_evlist__add_default(struct perf_evlist *evlist)
struct perf_evsel *evsel = perf_evsel__new(&attr, 0);
if (evsel == NULL)
- return -ENOMEM;
+ goto error;
+
+ /* use strdup() because free(evsel) assumes name is allocated */
+ evsel->name = strdup("cycles");
+ if (!evsel->name)
+ goto error_free;
perf_evlist__add(evlist, evsel);
return 0;
+error_free:
+ perf_evsel__delete(evsel);
+error:
+ return -ENOMEM;
}
void perf_evlist__disable(struct perf_evlist *evlist)