aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-trace.c')
-rw-r--r--tools/perf/builtin-trace.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 0756664666f1..3057e1d387b9 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -62,10 +62,9 @@ static int cleanup_scripting(void)
62 62
63static char const *input_name = "perf.data"; 63static char const *input_name = "perf.data";
64 64
65static struct perf_session *session;
66static u64 sample_type; 65static u64 sample_type;
67 66
68static int process_sample_event(event_t *event) 67static int process_sample_event(event_t *event, struct perf_session *session __used)
69{ 68{
70 struct sample_data data; 69 struct sample_data data;
71 struct thread *thread; 70 struct thread *thread;
@@ -125,20 +124,12 @@ static struct perf_file_handler file_handler = {
125 .sample_type_check = sample_type_check, 124 .sample_type_check = sample_type_check,
126}; 125};
127 126
128static int __cmd_trace(void) 127static int __cmd_trace(struct perf_session *session)
129{ 128{
130 int err;
131
132 session = perf_session__new(input_name, O_RDONLY, 0);
133 if (session == NULL)
134 return -ENOMEM;
135
136 register_idle_thread(); 129 register_idle_thread();
137 register_perf_file_handler(&file_handler); 130 register_perf_file_handler(&file_handler);
138 131
139 err = perf_session__process_events(session, 0, &event__cwdlen, &event__cwd); 132 return perf_session__process_events(session, 0, &event__cwdlen, &event__cwd);
140 perf_session__delete(session);
141 return err;
142} 133}
143 134
144struct script_spec { 135struct script_spec {
@@ -313,6 +304,7 @@ static const struct option options[] = {
313int cmd_trace(int argc, const char **argv, const char *prefix __used) 304int cmd_trace(int argc, const char **argv, const char *prefix __used)
314{ 305{
315 int err; 306 int err;
307 struct perf_session *session;
316 308
317 symbol__init(0); 309 symbol__init(0);
318 310
@@ -330,6 +322,10 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used)
330 322
331 setup_pager(); 323 setup_pager();
332 324
325 session = perf_session__new(input_name, O_RDONLY, 0);
326 if (session == NULL)
327 return -ENOMEM;
328
333 if (generate_script_lang) { 329 if (generate_script_lang) {
334 struct stat perf_stat; 330 struct stat perf_stat;
335 331
@@ -367,8 +363,9 @@ int cmd_trace(int argc, const char **argv, const char *prefix __used)
367 goto out; 363 goto out;
368 } 364 }
369 365
370 err = __cmd_trace(); 366 err = __cmd_trace(session);
371 367
368 perf_session__delete(session);
372 cleanup_scripting(); 369 cleanup_scripting();
373out: 370out:
374 return err; 371 return err;