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>
bb10
Marc Mutz 2022-05-13 18:21:01 +02:00
parent 1c338e6d07
commit 68f220c93b
1 changed files with 1 additions and 1 deletions

View File

@ -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;