From 7eafa58af88312890df34bf39efb013922cb6b9f Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Fri, 11 Mar 2022 04:12:21 +0330 Subject: [PATCH] Revert "LibPthread: Partially implement pthread_cleanup_(push pop)" This reverts commit 5d51e26caff61516d6fcf612c2e9ba72a82b699f. The threadlocal Vector was somehow misaligned, causing UBSAN to be sad about calling a misaligned method (either the dtor or .is_empty()) on it. For now, let's revert this and avoid the CI flake. Fixes #12957. --- Userland/Libraries/LibPthread/pthread.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/Userland/Libraries/LibPthread/pthread.cpp b/Userland/Libraries/LibPthread/pthread.cpp index e440fc1d7d..38997a8139 100644 --- a/Userland/Libraries/LibPthread/pthread.cpp +++ b/Userland/Libraries/LibPthread/pthread.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -38,12 +37,6 @@ static constexpr size_t highest_reasonable_stack_size = 8 * MiB; // That's the d __thread void* s_stack_location; __thread size_t s_stack_size; -struct CleanupHandler { - void (*function)(void*) { nullptr }; - void* argument { nullptr }; -}; -thread_local Vector s_cleanup_handlers {}; - #define __RETURN_PTHREAD_ERROR(rc) \ return ((rc) < 0 ? -(rc) : 0) @@ -146,23 +139,19 @@ int pthread_create(pthread_t* thread, pthread_attr_t* attributes, void* (*start_ // https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_exit.html void pthread_exit(void* value_ptr) { - while (!s_cleanup_handlers.is_empty()) - pthread_cleanup_pop(1); exit_thread(value_ptr, s_stack_location, s_stack_size); } // https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cleanup_push.html -void pthread_cleanup_push(void (*routine)(void*), void* arg) +void pthread_cleanup_push([[maybe_unused]] void (*routine)(void*), [[maybe_unused]] void* arg) { - s_cleanup_handlers.empend(routine, arg); + TODO(); } // https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_cleanup_pop.html -void pthread_cleanup_pop(int execute) +void pthread_cleanup_pop([[maybe_unused]] int execute) { - auto entry = s_cleanup_handlers.take_last(); - if (execute != 0) - entry.function(entry.argument); + TODO(); } // https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_join.html