From 6d930533037f27b906bbd02b0764041d931efb5d Mon Sep 17 00:00:00 2001 From: Niclas Rosenvik Date: Thu, 14 Jul 2022 18:35:01 +0200 Subject: [PATCH] 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 Reviewed-by: Thiago Macieira --- src/corelib/thread/qthread_unix.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index d7e5135199a..777aa362b20 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