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.

Change-Id: I1c7d2628f4248e00a12724a952568f7d92011986
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 6d930533037f27b906bbd02b0764041d931efb5d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Niclas Rosenvik 2022-07-14 18:35:01 +02:00 committed by Qt Cherry-pick Bot
parent 6ea58fb499
commit e5a46dd1cf

View File

@ -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>