perf evlist: Move destruction of maps to evlist destructor
[deliverable/linux.git] / tools / perf / tests / task-exit.c
index a3e64876e940020d93aa674ea064d735bf688713..fdeb2aa46a50ed47e39eed514c67937a9d994039 100644 (file)
@@ -9,12 +9,21 @@
 static int exited;
 static int nr_exit;
 
-static void sig_handler(int sig)
+static void sig_handler(int sig __maybe_unused)
 {
        exited = 1;
+}
 
-       if (sig == SIGUSR1)
-               nr_exit = -1;
+/*
+ * perf_evlist__prepare_workload will send a SIGUSR1 if the fork fails, since
+ * we asked by setting its exec_error to this handler.
+ */
+static void workload_exec_failed_signal(int signo __maybe_unused,
+                                       siginfo_t *info __maybe_unused,
+                                       void *ucontext __maybe_unused)
+{
+       exited  = 1;
+       nr_exit = -1;
 }
 
 /*
@@ -28,29 +37,19 @@ int test__task_exit(void)
        union perf_event *event;
        struct perf_evsel *evsel;
        struct perf_evlist *evlist;
-       struct perf_target target = {
+       struct target target = {
                .uid            = UINT_MAX,
                .uses_mmap      = true,
        };
        const char *argv[] = { "true", NULL };
 
        signal(SIGCHLD, sig_handler);
-       signal(SIGUSR1, sig_handler);
 
-       evlist = perf_evlist__new();
+       evlist = perf_evlist__new_default();
        if (evlist == NULL) {
-               pr_debug("perf_evlist__new\n");
+               pr_debug("perf_evlist__new_default\n");
                return -1;
        }
-       /*
-        * We need at least one evsel in the evlist, use the default
-        * one: "cycles".
-        */
-       err = perf_evlist__add_default(evlist);
-       if (err < 0) {
-               pr_debug("Not enough memory to create evsel\n");
-               goto out_free_evlist;
-       }
 
        /*
         * Create maps of threads and cpus to monitor. In this case
@@ -63,13 +62,14 @@ int test__task_exit(void)
        if (!evlist->cpus || !evlist->threads) {
                err = -ENOMEM;
                pr_debug("Not enough memory to create thread/cpu maps\n");
-               goto out_delete_maps;
+               goto out_delete_evlist;
        }
 
-       err = perf_evlist__prepare_workload(evlist, &target, argv, false, true);
+       err = perf_evlist__prepare_workload(evlist, &target, argv, false,
+                                           workload_exec_failed_signal);
        if (err < 0) {
                pr_debug("Couldn't run the workload!\n");
-               goto out_delete_maps;
+               goto out_delete_evlist;
        }
 
        evsel = perf_evlist__first(evlist);
@@ -83,7 +83,7 @@ int test__task_exit(void)
        err = perf_evlist__open(evlist);
        if (err < 0) {
                pr_debug("Couldn't open the evlist: %s\n", strerror(-err));
-               goto out_delete_maps;
+               goto out_delete_evlist;
        }
 
        if (perf_evlist__mmap(evlist, 128, true) < 0) {
@@ -115,9 +115,7 @@ retry:
        perf_evlist__munmap(evlist);
 out_close_evlist:
        perf_evlist__close(evlist);
-out_delete_maps:
-       perf_evlist__delete_maps(evlist);
-out_free_evlist:
+out_delete_evlist:
        perf_evlist__delete(evlist);
        return err;
 }
This page took 0.049153 seconds and 5 git commands to generate.