summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2022-03-10 17:10:39 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2022-05-24 18:15:41 +0200
commit718d680579508284f7617a4e7db24d140438478d (patch)
tree60b9954a5286c2b8988fb60f0f8dffa6d31d2215 /src/corelib/kernel
parent1221cd1f1b91610427f9037baaca0a0fda5a3d97 (diff)
Fix race conditions in moveToThread
Amends ba6c1d2785ca6d8a8b162abcd9d978ab0c52ea2d, which made m_statusOrPendingObjects already atomic, but did not handle concurrent deletion/push_back of the pendingObjects vector correctly. We use the existing lock in QThreadPrivate to prevent data races. Pick-to: 6.2 6.3 Fixes: QTBUG-101681 Change-Id: I0b440fee6ec270d762e6700a4fe74f28b19e75e8 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qobject.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 63dfb1cba0..05a881b63c 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -1858,7 +1858,7 @@ void QObject::moveToThread(QThread *targetThread)
? threadPrivate->bindingStatus()
: nullptr;
if (threadPrivate && !bindingStatus) {
- threadPrivate->addObjectWithPendingBindingStatusChange(this);
+ bindingStatus = threadPrivate->addObjectWithPendingBindingStatusChange(this);
}
d_func()->setThreadData_helper(currentData, targetData, bindingStatus);