Work-around crash in QThreadPool QThread usage

This works around mismatch in threads starting and restarting QThreads,
and is safe since we don't need to establish a binding, and objectName
access in QThreadPool is locked behind a mutex.

Fixes: QTBUG-96718
Change-Id: Id3f75e4f8344796ca658899645219fe3373ddd6d
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit 664c56d6b184b37546acc93128a692fa1bea7c3e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Allan Sandfeld Jensen 2022-01-20 13:19:28 +01:00 committed by Qt Cherry-pick Bot
parent 6a28cf6dee
commit 297323652b
2 changed files with 6 additions and 2 deletions

View File

@ -710,7 +710,9 @@ void QThread::start(Priority priority)
else
pthread_attr_setthreadname(&attr, objectName().toLocal8Bit());
#else
d->objectName = objectName();
// avoid interacting with the binding system
d->objectName = d->extraData ? d->extraData->objectName.valueBypassingBindings()
: QString();
#endif
pthread_t threadId;

View File

@ -420,7 +420,9 @@ void QThread::start(Priority priority)
if (d->running)
return;
d->objectName = objectName();
// avoid interacting with the binding system
d->objectName = d->extraData ? d->extraData->objectName.valueBypassingBindings()
: QString();
d->running = true;
d->finished = false;
d->exited = false;