diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-05-17 10:19:41 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-06-09 15:15:20 +0000 |
commit | c3ad3ad4195665cf06db09159580cd52dde53901 (patch) | |
tree | 485d7bcf80e485fd1aa9fefcc812e164027ab051 | |
parent | 1f3529d8e8a272be8138eeb4a0d0df7f9717526f (diff) |
Fix data race in QCoreApplicationPrivate::sendThroughApplicationEventFilters()v6.4.0-beta1
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.
Change-Id: Iee964490e93ebc323c188e616bf0d448f91fb2b5
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 0da17e83ec507229e3516bbdc5986ab775dc843e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/corelib/kernel/qcoreapplication.cpp | 2 |
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 |