summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qcoreapplication.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-05-17 10:19:41 +0200
committerMarc Mutz <marc.mutz@qt.io>2022-06-07 06:46:12 +0000
commit0da17e83ec507229e3516bbdc5986ab775dc843e (patch)
treecf2f817ac6cf12a4df1e2d11e4f9cd54b5eaab68 /src/corelib/kernel/qcoreapplication.cpp
parentd6575f37179aef80490f4ec03a61ab6f5033bd3d (diff)
Fix data race in QCoreApplicationPrivate::sendThroughApplicationEventFilters()
The assertion has the acquire fence at the wrong place: - QThreadData::thread isn't dereferenced, so the acquire fence on its load() isn't needed. - QObjectPrivate::threadData, however, _is_ dereferenced, so an acquire fence is needed; the relaxed load() is insufficient. Swapping the loadAcquire() and the loadRelaxed() fixes both issues. Pick-to: 6.4 6.3 6.2 5.15 Change-Id: Iee964490e93ebc323c188e616bf0d448f91fb2b5 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel/qcoreapplication.cpp')
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 43ff18fa5c..328e5b29de 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -1132,7 +1132,7 @@ static bool doNotify(QObject *receiver, QEvent *event)
bool QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject *receiver, QEvent *event)
{
// We can't access the application event filters outside of the main thread (race conditions)
- Q_ASSERT(receiver->d_func()->threadData.loadRelaxed()->thread.loadAcquire() == mainThread());
+ Q_ASSERT(receiver->d_func()->threadData.loadAcquire()->thread.loadRelaxed() == mainThread());
if (extraData) {
// application event filters are only called for objects in the GUI thread