From d84da399649d01ac689e87295f8decc024a4f8e8 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 16 Aug 2012 17:15:33 +0200 Subject: Use the new 3-operand testAndSet functions in QMutex This allows us to get the current value of the QMutex / QBasicMutex after the testAndSet operation failed. It saves an extra load from memory. Change-Id: I4922a8b3df15e342b177b13f56cf4f1184314520 Reviewed-by: Marc Mutz --- src/corelib/thread/qmutex.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/corelib/thread/qmutex.cpp') diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 0f305b79af..fe5beb1c01 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -216,9 +216,9 @@ QMutex::~QMutex() */ void QMutex::lock() QT_MUTEX_LOCK_NOEXCEPT { - if (fastTryLock()) + QMutexData *current; + if (fastTryLock(current)) return; - QMutexData *current = d_ptr.loadAcquire(); if (QT_PREPEND_NAMESPACE(isRecursive)(current)) static_cast(current)->lock(-1); else @@ -250,9 +250,9 @@ void QMutex::lock() QT_MUTEX_LOCK_NOEXCEPT */ bool QMutex::tryLock(int timeout) QT_MUTEX_LOCK_NOEXCEPT { - if (fastTryLock()) + QMutexData *current; + if (fastTryLock(current)) return true; - QMutexData *current = d_ptr.loadAcquire(); if (QT_PREPEND_NAMESPACE(isRecursive)(current)) return static_cast(current)->lock(timeout); else @@ -268,9 +268,9 @@ bool QMutex::tryLock(int timeout) QT_MUTEX_LOCK_NOEXCEPT */ void QMutex::unlock() Q_DECL_NOTHROW { - if (fastTryUnlock()) + QMutexData *current; + if (fastTryUnlock(current)) return; - QMutexData *current = d_ptr.loadAcquire(); if (QT_PREPEND_NAMESPACE(isRecursive)(current)) static_cast(current)->unlock(); else -- cgit v1.2.3