When an error occur a 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 occur.

Signed-off-by: Taeung Song <treeze.tae...@gmail.com>
---
 tools/perf/builtin-kvm.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 74878cd..5fa96a0 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -1061,8 +1061,10 @@ static int read_events(struct perf_kvm_stat *kvm)
 
        symbol__init(&kvm->session->header.env);
 
-       if (!perf_session__has_traces(kvm->session, "kvm record"))
-               return -EINVAL;
+       if (!perf_session__has_traces(kvm->session, "kvm record")) {
+               ret = -EINVAL;
+               goto out_delete;
+       }
 
        /*
         * Do not use 'isa' recorded in kvm_exit tracepoint since it is not
@@ -1070,9 +1072,15 @@ static int read_events(struct perf_kvm_stat *kvm)
         */
        ret = cpu_isa_config(kvm);
        if (ret < 0)
-               return ret;
+               goto out_delete;
 
-       return perf_session__process_events(kvm->session);
+       ret = perf_session__process_events(kvm->session);
+       if (ret < 0)
+               goto out_delete;
+
+out_delete:
+       perf_session__delete(kvm->session);
+       return ret;
 }
 
 static int parse_target_str(struct perf_kvm_stat *kvm)
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to