QThread: use load/store operations with explicit ordering
The implicit load is an acquire, which isn't necessary in any of these cases, including the two liens changing the store: they were creating a temporary QAtomicPointer, which introduced the loadAcquire(). I've left the qCDebug() lines alone. Pick-to: 6.5 Change-Id: If45e068eaaf3cd4d2c81fffd1459a779b4eb4110 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> (cherry picked from commit 6806391600b5398d4fdb3c4d2d5e442289522756) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>bb10
parent
8ebf6dcd12
commit
c3fd08e42c
|
|
@ -178,7 +178,7 @@ QThreadData *QThreadData::current(bool createIfNecessary)
|
|||
data = new QThreadData;
|
||||
QT_TRY {
|
||||
set_thread_data(data);
|
||||
data->thread = new QAdoptedThread(data);
|
||||
data->thread.storeRelease(new QAdoptedThread(data));
|
||||
} QT_CATCH(...) {
|
||||
clear_thread_data();
|
||||
data->deref();
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ QThreadData *QThreadData::current(bool createIfNecessary)
|
|||
// avoid recursion.
|
||||
TlsSetValue(qt_current_thread_data_tls_index, threadData);
|
||||
QT_TRY {
|
||||
threadData->thread = new QAdoptedThread(threadData);
|
||||
threadData->thread.storeRelease(new QAdoptedThread(threadData));
|
||||
} QT_CATCH(...) {
|
||||
TlsSetValue(qt_current_thread_data_tls_index, 0);
|
||||
threadData->deref();
|
||||
|
|
@ -101,7 +101,7 @@ QThreadData *QThreadData::current(bool createIfNecessary)
|
|||
0,
|
||||
FALSE,
|
||||
DUPLICATE_SAME_ACCESS);
|
||||
qt_watch_adopted_thread(realHandle, threadData->thread);
|
||||
qt_watch_adopted_thread(realHandle, threadData->thread.loadRelaxed());
|
||||
}
|
||||
}
|
||||
return threadData;
|
||||
|
|
|
|||
Loading…
Reference in New Issue