summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-05-13 18:21:01 +0200
committerMarc Mutz <marc.mutz@qt.io>2022-05-16 20:36:29 +0200
commit68f220c93b3e831a3f9b8cee0df6bd2ec69f7a11 (patch)
treef01b9417524f8bebd8e0117bd7fed40f0f17b82a
parent1c338e6d07a42631a6603c5bb0bc86f6806addd6 (diff)
QReadWriteLock: fix data race in stateForWaitCondition()
The function dereferences the load()ed pointer, so it needs an acquire fence. Pick-to: 6.3 6.2 5.15 Change-Id: Ib951de3f00851d915fec3392cdaba64f4a994300 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/thread/qreadwritelock.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/corelib/thread/qreadwritelock.cpp b/src/corelib/thread/qreadwritelock.cpp
index d5602974a6..c60580b9f3 100644
--- a/src/corelib/thread/qreadwritelock.cpp
+++ b/src/corelib/thread/qreadwritelock.cpp
@@ -414,7 +414,7 @@ void QReadWriteLock::unlock()
/*! \internal Helper for QWaitCondition::wait */
QReadWriteLock::StateForWaitCondition QReadWriteLock::stateForWaitCondition() const
{
- QReadWriteLockPrivate *d = d_ptr.loadRelaxed();
+ QReadWriteLockPrivate *d = d_ptr.loadAcquire();
switch (quintptr(d) & StateMask) {
case StateLockedForRead: return LockedForRead;
case StateLockedForWrite: return LockedForWrite;