diff options
Diffstat (limited to 'dev-games/aseprite/files/aseprite-1.2.40_musl_pthreads.patch')
-rw-r--r-- | dev-games/aseprite/files/aseprite-1.2.40_musl_pthreads.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/dev-games/aseprite/files/aseprite-1.2.40_musl_pthreads.patch b/dev-games/aseprite/files/aseprite-1.2.40_musl_pthreads.patch new file mode 100644 index 000000000000..6a6dfd9f6020 --- /dev/null +++ b/dev-games/aseprite/files/aseprite-1.2.40_musl_pthreads.patch @@ -0,0 +1,57 @@ +From 27403363708ca72cbbbdb085de27896485c5c422 Mon Sep 17 00:00:00 2001 +From: "Azamat H. Hackimov" <azamat.hackimov@gmail.com> +Date: Sat, 12 Nov 2022 05:13:08 +0300 +Subject: [PATCH] Don't use pthread_detach() after pthread_join() + +After pthread_join() all allocated to thread resources are freed, so +pthread_detach() after pthread_join() will results in undefined behavior +with SIGSERV on some libc implementations (like MUSL). According to +pthread_detach(3), "Either pthread_join(3) or pthread_detach() should be +called for each thread that an application creates". +--- + base/thread.cpp | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/laf/base/thread.cpp b/laf/base/thread.cpp +index 81c1284..4d5e0ce 100644 +--- a/laf/base/thread.cpp ++++ b/laf/base/thread.cpp +@@ -55,8 +55,12 @@ thread::thread() + + thread::~thread() + { +- if (joinable()) ++ if (joinable()) { ++#if LAF_WINDOWS ++ ::CloseHandle(m_native_handle); ++#endif + detach(); ++ } + } + + bool thread::joinable() const +@@ -69,6 +73,7 @@ void thread::join() + if (joinable()) { + #if LAF_WINDOWS + ::WaitForSingleObject(m_native_handle, INFINITE); ++ ::CloseHandle(m_native_handle); + #else + ::pthread_join((pthread_t)m_native_handle, NULL); + #endif +@@ -79,12 +84,7 @@ void thread::join() + void thread::detach() + { + if (joinable()) { +-#if LAF_WINDOWS +- ::CloseHandle(m_native_handle); +- m_native_handle = (native_handle_type)0; +-#else +- ::pthread_detach((pthread_t)m_native_handle); +-#endif ++ m_native_handle = (native_handle_type)NULL; + } + } + +-- +2.37.4 + |