summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc Mutz <[email protected]>2022-05-17 17:01:52 +0200
committerMarc Mutz <[email protected]>2022-05-20 20:07:37 +0200
commite02a171a47e87048d16faf7167c0fecd46a176b5 (patch)
tree4f644fcfc101611110e483bfcaf5b124bae3d71d /src
parent37f277f3d77c94a2d827faf7f1ea5a5b15d1b5e7 (diff)
Optimize reads from QObjectPrivate::threadData
The implicit conversion operator from QAtomicPointer<T> → T* performs a loadAcquire(). In the cases of this patch, we're only comparing pointer values to check whether QObject thread affinities are compatible, so relaxed loads suffice. Pick-to: 6.3 Change-Id: If19124778b4770d86baeaeb3c91214e47881b288 Reviewed-by: Sona Kurazyan <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp6
-rw-r--r--src/corelib/kernel/qobject.cpp4
2 files changed, 5 insertions, 5 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 9937e018f66..13c792af299 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -1140,7 +1140,7 @@ bool QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject *receiv
QObject *obj = extraData->eventFilters.at(i);
if (!obj)
continue;
- if (obj->d_func()->threadData != threadData) {
+ if (obj->d_func()->threadData.loadRelaxed() != threadData.loadRelaxed()) {
qWarning("QCoreApplication: Application event filter cannot be in a different thread.");
continue;
}
@@ -1158,7 +1158,7 @@ bool QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject *receiver, Q
QObject *obj = receiver->d_func()->extraData->eventFilters.at(i);
if (!obj)
continue;
- if (obj->d_func()->threadData != receiver->d_func()->threadData) {
+ if (obj->d_func()->threadData.loadRelaxed() != receiver->d_func()->threadData.loadRelaxed()) {
qWarning("QCoreApplication: Object event filter cannot be in a different thread.");
continue;
}
@@ -1678,7 +1678,7 @@ void QCoreApplicationPrivate::sendPostedEvents(QObject *receiver, int event_type
event_type = 0;
}
- if (receiver && receiver->d_func()->threadData != data) {
+ if (receiver && receiver->d_func()->threadData.loadRelaxed() != data) {
qWarning("QCoreApplication::sendPostedEvents: Cannot send "
"posted events for objects in another thread");
return;
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 3254f2a9feb..e438c115135 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -2413,7 +2413,7 @@ void QObjectPrivate::setParent_helper(QObject *o)
parent = o;
if (parent) {
// object hierarchies are constrained to a single thread
- if (threadData != parent->d_func()->threadData) {
+ if (threadData.loadRelaxed() != parent->d_func()->threadData.loadRelaxed()) {
qWarning("QObject::setParent: Cannot set parent, new parent is in a different thread");
parent = nullptr;
return;
@@ -2475,7 +2475,7 @@ void QObject::installEventFilter(QObject *obj)
Q_D(QObject);
if (!obj)
return;
- if (d->threadData != obj->d_func()->threadData) {
+ if (d->threadData.loadRelaxed() != obj->d_func()->threadData.loadRelaxed()) {
qWarning("QObject::installEventFilter(): Cannot filter events for objects in a different thread.");
return;
}