diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/thread/qmutex.cpp | 12 | ||||
-rw-r--r-- | src/corelib/thread/qmutex.h | 6 |
2 files changed, 12 insertions, 6 deletions
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<QRecursiveMutexPrivate *>(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<QRecursiveMutexPrivate *>(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<QRecursiveMutexPrivate *>(current)->unlock(); else diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h index 0bca0def22..0ecc96a9b1 100644 --- a/src/corelib/thread/qmutex.h +++ b/src/corelib/thread/qmutex.h @@ -86,6 +86,12 @@ private: inline bool fastTryUnlock() Q_DECL_NOTHROW { return d_ptr.testAndSetRelease(dummyLocked(), 0); } + inline bool fastTryLock(QMutexData *¤t) Q_DECL_NOTHROW { + return d_ptr.testAndSetAcquire(0, dummyLocked(), current); + } + inline bool fastTryUnlock(QMutexData *¤t) Q_DECL_NOTHROW { + return d_ptr.testAndSetRelease(dummyLocked(), 0, current); + } void lockInternal() QT_MUTEX_LOCK_NOEXCEPT; bool lockInternal(int timeout) QT_MUTEX_LOCK_NOEXCEPT; |