perf tools: Pass a fd to perf_file_header__read_pipe()
[linux-2.6-microblaze.git] / tools / perf / util / session.c
index e9c929a..d2e27ff 100644 (file)
@@ -102,11 +102,11 @@ static int perf_session__deliver_event(struct perf_session *session,
                                       struct perf_tool *tool,
                                       u64 file_offset);
 
-static int perf_session__open(struct perf_session *session)
+static int perf_session__open(struct perf_session *session, int repipe_fd)
 {
        struct perf_data *data = session->data;
 
-       if (perf_session__read_header(session) < 0) {
+       if (perf_session__read_header(session, repipe_fd) < 0) {
                pr_err("incompatible file format (rerun with -v to learn more)\n");
                return -1;
        }
@@ -185,8 +185,9 @@ static int ordered_events__deliver_event(struct ordered_events *oe,
                                           session->tool, event->file_offset);
 }
 
-struct perf_session *perf_session__new(struct perf_data *data,
-                                      bool repipe, struct perf_tool *tool)
+struct perf_session *__perf_session__new(struct perf_data *data,
+                                        bool repipe, int repipe_fd,
+                                        struct perf_tool *tool)
 {
        int ret = -ENOMEM;
        struct perf_session *session = zalloc(sizeof(*session));
@@ -210,7 +211,7 @@ struct perf_session *perf_session__new(struct perf_data *data,
                session->data = data;
 
                if (perf_data__is_read(data)) {
-                       ret = perf_session__open(session);
+                       ret = perf_session__open(session, repipe_fd);
                        if (ret < 0)
                                goto out_delete;
 
@@ -306,6 +307,7 @@ void perf_session__delete(struct perf_session *session)
                        evlist__delete(session->evlist);
                perf_data__close(session->data);
        }
+       trace_event__cleanup(&session->tevent);
        free(session);
 }