aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaeung Song <treeze.taeung@gmail.com>2015-07-01 08:08:19 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-07-01 16:53:49 -0400
commit1df9fade87ea4831c024de9806f88427f9f33e62 (patch)
treedf9122c9333606cf0606aa9e5d691e704f1b4132
parent41b983609a1618e9fa70023d83232ed959056c8a (diff)
perf mem: Fill in the missing session freeing after an error occurs
When an error occurs an error value is just returned without freeing the session. So allocating and freeing session have to be matched as a pair even if an error occurs. Signed-off-by: Taeung Song <treeze.taeung@gmail.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/1435752499-11752-1-git-send-email-treeze.taeung@gmail.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/builtin-mem.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index da2ec06f0742..80170aace5d4 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -124,7 +124,6 @@ static int report_raw_events(struct perf_mem *mem)
124 .mode = PERF_DATA_MODE_READ, 124 .mode = PERF_DATA_MODE_READ,
125 .force = mem->force, 125 .force = mem->force,
126 }; 126 };
127 int err = -EINVAL;
128 int ret; 127 int ret;
129 struct perf_session *session = perf_session__new(&file, false, 128 struct perf_session *session = perf_session__new(&file, false,
130 &mem->tool); 129 &mem->tool);
@@ -135,24 +134,21 @@ static int report_raw_events(struct perf_mem *mem)
135 if (mem->cpu_list) { 134 if (mem->cpu_list) {
136 ret = perf_session__cpu_bitmap(session, mem->cpu_list, 135 ret = perf_session__cpu_bitmap(session, mem->cpu_list,
137 mem->cpu_bitmap); 136 mem->cpu_bitmap);
138 if (ret) 137 if (ret < 0)
139 goto out_delete; 138 goto out_delete;
140 } 139 }
141 140
142 if (symbol__init(&session->header.env) < 0) 141 ret = symbol__init(&session->header.env);
143 return -1; 142 if (ret < 0)
143 goto out_delete;
144 144
145 printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n"); 145 printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n");
146 146
147 err = perf_session__process_events(session); 147 ret = perf_session__process_events(session);
148 if (err)
149 return err;
150
151 return 0;
152 148
153out_delete: 149out_delete:
154 perf_session__delete(session); 150 perf_session__delete(session);
155 return err; 151 return ret;
156} 152}
157 153
158static int report_events(int argc, const char **argv, struct perf_mem *mem) 154static int report_events(int argc, const char **argv, struct perf_mem *mem)