}
 
        err = __cmd_record(&record, argc, argv);
-
-       perf_evlist__munmap(rec->evlist);
 out_symbol_exit:
        symbol__exit();
        return err;
 
                }
        }
 
-       perf_evlist__munmap(evlist);
 out_delete_evlist:
        perf_evlist__delete(evlist);
 out:
 
                err = TEST_CODE_READING_OK;
 out_err:
        if (evlist) {
-               perf_evlist__munmap(evlist);
                perf_evlist__delete(evlist);
        } else {
                cpu_map__delete(cpus);
 
 out_err:
        if (evlist) {
                perf_evlist__disable(evlist);
-               perf_evlist__munmap(evlist);
                perf_evlist__delete(evlist);
        } else {
                cpu_map__delete(cpus);
 
                if (event->header.type != PERF_RECORD_SAMPLE) {
                        pr_debug("unexpected %s event\n",
                                 perf_event__name(event->header.type));
-                       goto out_munmap;
+                       goto out_delete_evlist;
                }
 
                err = perf_evlist__parse_sample(evlist, event, &sample);
                if (err) {
                        pr_err("Can't parse sample, err = %d\n", err);
-                       goto out_munmap;
+                       goto out_delete_evlist;
                }
 
                err = -1;
                if (evsel == NULL) {
                        pr_debug("event with id %" PRIu64
                                 " doesn't map to an evsel\n", sample.id);
-                       goto out_munmap;
+                       goto out_delete_evlist;
                }
                nr_events[evsel->idx]++;
                perf_evlist__mmap_consume(evlist, 0);
                                 expected_nr_events[evsel->idx],
                                 perf_evsel__name(evsel), nr_events[evsel->idx]);
                        err = -1;
-                       goto out_munmap;
+                       goto out_delete_evlist;
                }
        }
 
-out_munmap:
-       perf_evlist__munmap(evlist);
 out_delete_evlist:
        perf_evlist__delete(evlist);
        cpus    = NULL;
 
                                err = perf_evsel__parse_sample(evsel, event, &sample);
                                if (err) {
                                        pr_err("Can't parse sample, err = %d\n", err);
-                                       goto out_munmap;
+                                       goto out_delete_evlist;
                                }
 
                                tp_flags = perf_evsel__intval(evsel, &sample, "flags");
                                if (flags != tp_flags) {
                                        pr_debug("%s: Expected flags=%#x, got %#x\n",
                                                 __func__, flags, tp_flags);
-                                       goto out_munmap;
+                                       goto out_delete_evlist;
                                }
 
                                goto out_ok;
 
                if (++nr_polls > 5) {
                        pr_debug("%s: no events!\n", __func__);
-                       goto out_munmap;
+                       goto out_delete_evlist;
                }
        }
 out_ok:
        err = 0;
-out_munmap:
-       perf_evlist__munmap(evlist);
 out_delete_evlist:
        perf_evlist__delete(evlist);
 out:
 
                                        if (verbose)
                                                perf_event__fprintf(event, stderr);
                                        pr_debug("Couldn't parse sample\n");
-                                       goto out_err;
+                                       goto out_delete_evlist;
                                }
 
                                if (verbose) {
                pr_debug("PERF_RECORD_MMAP for %s missing!\n", "[vdso]");
                ++errs;
        }
-out_err:
-       perf_evlist__munmap(evlist);
 out_delete_evlist:
        perf_evlist__delete(evlist);
 out:
 
 out_err:
        if (evlist) {
                perf_evlist__disable(evlist);
-               perf_evlist__munmap(evlist);
                perf_evlist__delete(evlist);
        }
 
 
                err = perf_evlist__parse_sample(evlist, event, &sample);
                if (err < 0) {
                        pr_debug("Error during parse sample\n");
-                       goto out_unmap_evlist;
+                       goto out_delete_evlist;
                }
 
                total_periods += sample.period;
                err = -1;
        }
 
-out_unmap_evlist:
-       perf_evlist__munmap(evlist);
 out_delete_evlist:
        perf_evlist__delete(evlist);
        return err;
 
                err = -1;
        }
 
-       perf_evlist__munmap(evlist);
 out_delete_evlist:
        perf_evlist__delete(evlist);
        return err;
 
 
 void perf_evlist__delete(struct perf_evlist *evlist)
 {
+       perf_evlist__munmap(evlist);
        perf_evlist__close(evlist);
        cpu_map__delete(evlist->cpus);
        thread_map__delete(evlist->threads);
 {
        int i;
 
+       if (evlist->mmap == NULL)
+               return;
+
        for (i = 0; i < evlist->nr_mmaps; i++)
                __perf_evlist__munmap(evlist, i);