summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread
diff options
context:
space:
mode:
authorNiclas Rosenvik <nros@netbsd.org>2022-07-14 18:35:01 +0200
committerThiago Macieira <thiago.macieira@intel.com>2022-08-31 19:55:00 +0000
commit6d930533037f27b906bbd02b0764041d931efb5d (patch)
tree4f8927666075089767b40bfbfd7781601cf6f529 /src/corelib/thread
parent619cb795b28192b8bc8551ddc0a784db43e918f1 (diff)
Fix possible undefined behavior in clear_thread_data
Fix possible undefined behavior in clear_thread_data. The key used in pthread_setspecific must be obtained from pthread_key_create or undefined behavior occurs. Use set_thread_data to clear it since it ensures that the key has been obtained using pthread_key_create by calling pthread_once using create_current_thread_data_key. Fixes crash when closing threaded qt apps on NetBSD. Pick-to: 5.15 6.2 6.3 6.4 Change-Id: I1c7d2628f4248e00a12724a952568f7d92011986 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/thread')
-rw-r--r--src/corelib/thread/qthread_unix.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index d7e5135199..777aa362b2 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -137,8 +137,7 @@ static void set_thread_data(QThreadData *data)
static void clear_thread_data()
{
- currentThreadData = nullptr;
- pthread_setspecific(current_thread_data_key, nullptr);
+ set_thread_data(nullptr);
}
template <typename T>