return NULL;
 }
 
-static void create_threads(struct worker *w, pthread_attr_t thread_attr,
-                          struct perf_cpu_map *cpu)
+static void create_threads(struct worker *w, struct perf_cpu_map *cpu)
 {
        cpu_set_t *cpuset;
        unsigned int i;
        size = CPU_ALLOC_SIZE(nrcpus);
 
        for (i = 0; i < params.nthreads; i++) {
+               pthread_attr_t thread_attr;
+
+               pthread_attr_init(&thread_attr);
                worker[i].tid = i;
 
                if (params.multi) {
                        CPU_FREE(cpuset);
                        err(EXIT_FAILURE, "pthread_create");
                }
+               pthread_attr_destroy(&thread_attr);
        }
        CPU_FREE(cpuset);
 }
        int ret = 0;
        unsigned int i;
        struct sigaction act;
-       pthread_attr_t thread_attr;
        struct perf_cpu_map *cpu;
 
        argc = parse_options(argc, argv, options, bench_futex_lock_pi_usage, 0);
        cond_init(&thread_worker);
 
        threads_starting = params.nthreads;
-       pthread_attr_init(&thread_attr);
        gettimeofday(&bench__start, NULL);
 
-       create_threads(worker, thread_attr, cpu);
-       pthread_attr_destroy(&thread_attr);
+       create_threads(worker, cpu);
 
        mutex_lock(&thread_lock);
        while (threads_starting)
 
        return NULL;
 }
 
-static void block_threads(pthread_t *w,
-                         pthread_attr_t thread_attr, struct perf_cpu_map *cpu)
+static void block_threads(pthread_t *w, struct perf_cpu_map *cpu)
 {
        cpu_set_t *cpuset;
        unsigned int i;
 
        /* create and block all threads */
        for (i = 0; i < params.nthreads; i++) {
+               pthread_attr_t thread_attr;
+
+               pthread_attr_init(&thread_attr);
                CPU_ZERO_S(size, cpuset);
                CPU_SET_S(perf_cpu_map__cpu(cpu, i % perf_cpu_map__nr(cpu)).cpu, size, cpuset);
 
                        CPU_FREE(cpuset);
                        err(EXIT_FAILURE, "pthread_create");
                }
+               pthread_attr_destroy(&thread_attr);
        }
        CPU_FREE(cpuset);
 }
        int ret = 0;
        unsigned int i, j;
        struct sigaction act;
-       pthread_attr_t thread_attr;
        struct perf_cpu_map *cpu;
 
        argc = parse_options(argc, argv, options, bench_futex_requeue_usage, 0);
 
        init_stats(&requeued_stats);
        init_stats(&requeuetime_stats);
-       pthread_attr_init(&thread_attr);
        mutex_init(&thread_lock);
        cond_init(&thread_parent);
        cond_init(&thread_worker);
                struct timeval start, end, runtime;
 
                /* create, launch & block all threads */
-               block_threads(worker, thread_attr, cpu);
+               block_threads(worker, cpu);
 
                /* make sure all threads are already blocked */
                mutex_lock(&thread_lock);
        cond_destroy(&thread_parent);
        cond_destroy(&thread_worker);
        mutex_destroy(&thread_lock);
-       pthread_attr_destroy(&thread_attr);
 
        print_summary();
 
 
        return NULL;
 }
 
-static void wakeup_threads(struct thread_data *td, pthread_attr_t thread_attr)
+static void wakeup_threads(struct thread_data *td)
 {
        unsigned int i;
+       pthread_attr_t thread_attr;
 
+       pthread_attr_init(&thread_attr);
        pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_JOINABLE);
 
        pthread_barrier_init(&barrier, NULL, params.nwakes + 1);
                        err(EXIT_FAILURE, "pthread_join");
 
        pthread_barrier_destroy(&barrier);
+       pthread_attr_destroy(&thread_attr);
 }
 
 static void *blocked_workerfn(void *arg __maybe_unused)
        return NULL;
 }
 
-static void block_threads(pthread_t *w, pthread_attr_t thread_attr,
-                         struct perf_cpu_map *cpu)
+static void block_threads(pthread_t *w, struct perf_cpu_map *cpu)
 {
        cpu_set_t *cpuset;
        unsigned int i;
 
        /* create and block all threads */
        for (i = 0; i < params.nthreads; i++) {
+               pthread_attr_t thread_attr;
+
+               pthread_attr_init(&thread_attr);
                CPU_ZERO_S(size, cpuset);
                CPU_SET_S(perf_cpu_map__cpu(cpu, i % perf_cpu_map__nr(cpu)).cpu, size, cpuset);
 
                        CPU_FREE(cpuset);
                        err(EXIT_FAILURE, "pthread_create");
                }
+               pthread_attr_destroy(&thread_attr);
        }
        CPU_FREE(cpuset);
 }
        int ret = 0;
        unsigned int i, j;
        struct sigaction act;
-       pthread_attr_t thread_attr;
        struct thread_data *waking_worker;
        struct perf_cpu_map *cpu;
 
        init_stats(&wakeup_stats);
        init_stats(&waketime_stats);
 
-       pthread_attr_init(&thread_attr);
        mutex_init(&thread_lock);
        cond_init(&thread_parent);
        cond_init(&thread_worker);
                        err(EXIT_FAILURE, "calloc");
 
                /* create, launch & block all threads */
-               block_threads(blocked_worker, thread_attr, cpu);
+               block_threads(blocked_worker, cpu);
 
                /* make sure all threads are already blocked */
                mutex_lock(&thread_lock);
                usleep(100000);
 
                /* Ok, all threads are patiently blocked, start waking folks up */
-               wakeup_threads(waking_worker, thread_attr);
+               wakeup_threads(waking_worker);
 
                for (i = 0; i < params.nthreads; i++) {
                        ret = pthread_join(blocked_worker[i], NULL);
        cond_destroy(&thread_parent);
        cond_destroy(&thread_worker);
        mutex_destroy(&thread_lock);
-       pthread_attr_destroy(&thread_attr);
 
        print_summary();
 
 
               rel_stddev_stats(waketime_stddev, waketime_avg));
 }
 
-static void block_threads(pthread_t *w,
-                         pthread_attr_t thread_attr, struct perf_cpu_map *cpu)
+static void block_threads(pthread_t *w, struct perf_cpu_map *cpu)
 {
        cpu_set_t *cpuset;
        unsigned int i;
 
        /* create and block all threads */
        for (i = 0; i < params.nthreads; i++) {
+               pthread_attr_t thread_attr;
+
+               pthread_attr_init(&thread_attr);
                CPU_ZERO_S(size, cpuset);
                CPU_SET_S(perf_cpu_map__cpu(cpu, i % perf_cpu_map__nr(cpu)).cpu, size, cpuset);
 
                        CPU_FREE(cpuset);
                        err(EXIT_FAILURE, "pthread_create");
                }
+               pthread_attr_destroy(&thread_attr);
        }
        CPU_FREE(cpuset);
 }
        int ret = 0;
        unsigned int i, j;
        struct sigaction act;
-       pthread_attr_t thread_attr;
        struct perf_cpu_map *cpu;
 
        argc = parse_options(argc, argv, options, bench_futex_wake_usage, 0);
 
        init_stats(&wakeup_stats);
        init_stats(&waketime_stats);
-       pthread_attr_init(&thread_attr);
        mutex_init(&thread_lock);
        cond_init(&thread_parent);
        cond_init(&thread_worker);
                struct timeval start, end, runtime;
 
                /* create, launch & block all threads */
-               block_threads(worker, thread_attr, cpu);
+               block_threads(worker, cpu);
 
                /* make sure all threads are already blocked */
                mutex_lock(&thread_lock);
        cond_destroy(&thread_parent);
        cond_destroy(&thread_worker);
        mutex_destroy(&thread_lock);
-       pthread_attr_destroy(&thread_attr);
 
        print_summary();