Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Taeung Song and committed by
Arnaldo Carvalho de Melo
1df9fade 41b98360

+6 -10
+6 -10
tools/perf/builtin-mem.c
··· 124 124 .mode = PERF_DATA_MODE_READ, 125 125 .force = mem->force, 126 126 }; 127 - int err = -EINVAL; 128 127 int ret; 129 128 struct perf_session *session = perf_session__new(&file, false, 130 129 &mem->tool); ··· 134 135 if (mem->cpu_list) { 135 136 ret = perf_session__cpu_bitmap(session, mem->cpu_list, 136 137 mem->cpu_bitmap); 137 - if (ret) 138 + if (ret < 0) 138 139 goto out_delete; 139 140 } 140 141 141 - if (symbol__init(&session->header.env) < 0) 142 - return -1; 142 + ret = symbol__init(&session->header.env); 143 + if (ret < 0) 144 + goto out_delete; 143 145 144 146 printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n"); 145 147 146 - err = perf_session__process_events(session); 147 - if (err) 148 - return err; 149 - 150 - return 0; 148 + ret = perf_session__process_events(session); 151 149 152 150 out_delete: 153 151 perf_session__delete(session); 154 - return err; 152 + return ret; 155 153 } 156 154 157 155 static int report_events(int argc, const char **argv, struct perf_mem *mem)