aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r--tools/perf/util/session.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 09836a537fc5..fe87a2f2e5a5 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -49,7 +49,7 @@ out_close:
49} 49}
50 50
51struct perf_session *perf_session__new(const char *filename, int mode, 51struct perf_session *perf_session__new(const char *filename, int mode,
52 bool force) 52 bool force, struct symbol_conf *conf)
53{ 53{
54 size_t len = filename ? strlen(filename) + 1 : 0; 54 size_t len = filename ? strlen(filename) + 1 : 0;
55 struct perf_session *self = zalloc(sizeof(*self) + len); 55 struct perf_session *self = zalloc(sizeof(*self) + len);
@@ -58,7 +58,7 @@ struct perf_session *perf_session__new(const char *filename, int mode,
58 goto out; 58 goto out;
59 59
60 if (perf_header__init(&self->header) < 0) 60 if (perf_header__init(&self->header) < 0)
61 goto out_delete; 61 goto out_free;
62 62
63 memcpy(self->filename, filename, len); 63 memcpy(self->filename, filename, len);
64 self->threads = RB_ROOT; 64 self->threads = RB_ROOT;
@@ -66,16 +66,21 @@ struct perf_session *perf_session__new(const char *filename, int mode,
66 self->mmap_window = 32; 66 self->mmap_window = 32;
67 self->cwd = NULL; 67 self->cwd = NULL;
68 self->cwdlen = 0; 68 self->cwdlen = 0;
69 map_groups__init(&self->kmaps);
69 70
70 if (mode == O_RDONLY && perf_session__open(self, force) < 0) { 71 if (perf_session__create_kernel_maps(self, conf) < 0)
71 perf_session__delete(self); 72 goto out_delete;
72 self = NULL; 73
73 } 74 if (mode == O_RDONLY && perf_session__open(self, force) < 0)
75 goto out_delete;
74out: 76out:
75 return self; 77 return self;
76out_delete: 78out_free:
77 free(self); 79 free(self);
78 return NULL; 80 return NULL;
81out_delete:
82 perf_session__delete(self);
83 return NULL;
79} 84}
80 85
81void perf_session__delete(struct perf_session *self) 86void perf_session__delete(struct perf_session *self)