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>
This commit is contained in:
parent
d6575f3717
commit
0da17e83ec
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user