perf probe: Fix memory leak when synthesizing SDT probes
[linux-2.6-microblaze.git] / tools / perf / builtin-report.c
index 3c74c9c..2a845d6 100644 (file)
@@ -211,7 +211,7 @@ static void setup_forced_leader(struct report *report,
                                struct evlist *evlist)
 {
        if (report->group_set)
-               perf_evlist__force_leader(evlist);
+               evlist__force_leader(evlist);
 }
 
 static int process_feature_event(struct perf_session *session,
@@ -226,6 +226,8 @@ static int process_feature_event(struct perf_session *session,
                pr_err("failed: wrong feature ID: %" PRI_lu64 "\n",
                       event->feat.feat_id);
                return -1;
+       } else if (rep->header_only) {
+               session_done = 1;
        }
 
        /*
@@ -493,8 +495,7 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report
        return ret + fprintf(fp, "\n#\n");
 }
 
-static int perf_evlist__tui_block_hists_browse(struct evlist *evlist,
-                                              struct report *rep)
+static int evlist__tui_block_hists_browse(struct evlist *evlist, struct report *rep)
 {
        struct evsel *pos;
        int i = 0, ret;
@@ -511,9 +512,7 @@ static int perf_evlist__tui_block_hists_browse(struct evlist *evlist,
        return 0;
 }
 
-static int perf_evlist__tty_browse_hists(struct evlist *evlist,
-                                        struct report *rep,
-                                        const char *help)
+static int evlist__tty_browse_hists(struct evlist *evlist, struct report *rep, const char *help)
 {
        struct evsel *pos;
        int i = 0;
@@ -566,7 +565,7 @@ static void report__warn_kptr_restrict(const struct report *rep)
        struct map *kernel_map = machine__kernel_map(&rep->session->machines.host);
        struct kmap *kernel_kmap = kernel_map ? map__kmap(kernel_map) : NULL;
 
-       if (perf_evlist__exclude_kernel(rep->session->evlist))
+       if (evlist__exclude_kernel(rep->session->evlist))
                return;
 
        if (kernel_map == NULL ||
@@ -595,7 +594,7 @@ static int report__gtk_browse_hists(struct report *rep, const char *help)
        int (*hist_browser)(struct evlist *evlist, const char *help,
                            struct hist_browser_timer *timer, float min_pcnt);
 
-       hist_browser = dlsym(perf_gtk_handle, "perf_evlist__gtk_browse_hists");
+       hist_browser = dlsym(perf_gtk_handle, "evlist__gtk_browse_hists");
 
        if (hist_browser == NULL) {
                ui__error("GTK browser not found!\n");
@@ -622,14 +621,12 @@ static int report__browse_hists(struct report *rep)
        switch (use_browser) {
        case 1:
                if (rep->total_cycles_mode) {
-                       ret = perf_evlist__tui_block_hists_browse(evlist, rep);
+                       ret = evlist__tui_block_hists_browse(evlist, rep);
                        break;
                }
 
-               ret = perf_evlist__tui_browse_hists(evlist, help, NULL,
-                                                   rep->min_percent,
-                                                   &session->header.env,
-                                                   true, &rep->annotation_opts);
+               ret = evlist__tui_browse_hists(evlist, help, NULL, rep->min_percent,
+                                              &session->header.env, true, &rep->annotation_opts);
                /*
                 * Usually "ret" is the last pressed key, and we only
                 * care if the key notifies us to switch data file.
@@ -641,7 +638,7 @@ static int report__browse_hists(struct report *rep)
                ret = report__gtk_browse_hists(rep, help);
                break;
        default:
-               ret = perf_evlist__tty_browse_hists(evlist, rep, help);
+               ret = evlist__tty_browse_hists(evlist, rep, help);
                break;
        }
 
@@ -933,7 +930,7 @@ static int __cmd_report(struct report *rep)
 
                if (dump_trace) {
                        perf_session__fprintf_nr_events(session, stdout);
-                       perf_evlist__fprintf_nr_events(session->evlist, stdout);
+                       evlist__fprintf_nr_events(session->evlist, stdout);
                        return 0;
                }
        }
@@ -1517,6 +1514,13 @@ repeat:
                perf_session__fprintf_info(session, stdout,
                                           report.show_full_info);
                if (report.header_only) {
+                       if (data.is_pipe) {
+                               /*
+                                * we need to process first few records
+                                * which contains PERF_RECORD_HEADER_FEATURE.
+                                */
+                               perf_session__process_events(session);
+                       }
                        ret = 0;
                        goto error;
                }