diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-05-13 18:21:01 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2022-05-16 20:36:29 +0200 |
commit | 68f220c93b3e831a3f9b8cee0df6bd2ec69f7a11 (patch) | |
tree | f01b9417524f8bebd8e0117bd7fed40f0f17b82a | |
parent | 1c338e6d07a42631a6603c5bb0bc86f6806addd6 (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.cpp | 2 |
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; |