perf evlist: Move destruction of maps to evlist destructor
[deliverable/linux.git] / tools / perf / tests / task-exit.c
index d09ab579119ebb1b701d80f4f377e54122670bf5..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;
 }
 
 /*
@@ -35,7 +44,6 @@ int test__task_exit(void)
        const char *argv[] = { "true", NULL };
 
        signal(SIGCHLD, sig_handler);
-       signal(SIGUSR1, sig_handler);
 
        evlist = perf_evlist__new_default();
        if (evlist == NULL) {
@@ -54,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);
@@ -74,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) {
@@ -106,8 +115,7 @@ retry:
        perf_evlist__munmap(evlist);
 out_close_evlist:
        perf_evlist__close(evlist);
-out_delete_maps:
-       perf_evlist__delete_maps(evlist);
+out_delete_evlist:
        perf_evlist__delete(evlist);
        return err;
 }
This page took 0.025328 seconds and 5 git commands to generate.