From 68f220c93b3e831a3f9b8cee0df6bd2ec69f7a11 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 13 May 2022 18:21:01 +0200 Subject: [PATCH] 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 Reviewed-by: Thiago Macieira --- src/corelib/thread/qreadwritelock.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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;