summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread
diff options
context:
space:
mode:
authorJani Heikkinen <jani.heikkinen@qt.io>2019-09-18 09:31:17 +0000
committerJani Heikkinen <jani.heikkinen@qt.io>2019-09-19 04:15:04 +0000
commit1283ee324578e4cf5cc210d8d3c89647d6c56ec3 (patch)
treeffb9d40c6c5e32571871cf8c8e502a36898c8fa7 /src/corelib/thread
parent57e8fe86bdd3a38e8b968f553a3cfaa6541feee1 (diff)
Revert "QReadWriteLock: replace (QWaitCondition, QMutex) with std::(condition_variable, mutex)"
This reverts commit 319c4786036b5f45fc95c683cef5cf5ba2ce2a6d. Reason for revert: QTBUG-78450 Change-Id: Ifaea83626296508558591d4ff207d4e0c883f841 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'src/corelib/thread')
-rw-r--r--src/corelib/thread/qreadwritelock.cpp37
-rw-r--r--src/corelib/thread/qreadwritelock_p.h14
2 files changed, 22 insertions, 29 deletions
diff --git a/src/corelib/thread/qreadwritelock.cpp b/src/corelib/thread/qreadwritelock.cpp
index 5aba05c1b9..14654986a0 100644
--- a/src/corelib/thread/qreadwritelock.cpp
+++ b/src/corelib/thread/qreadwritelock.cpp
@@ -50,8 +50,6 @@
#include "private/qfreelist_p.h"
#include "private/qlocking_p.h"
-#include <chrono>
-
QT_BEGIN_NAMESPACE
/*
@@ -67,9 +65,6 @@ QT_BEGIN_NAMESPACE
*/
namespace {
-
-using ms = std::chrono::milliseconds;
-
enum {
StateMask = 0x3,
StateLockedForRead = 0x1,
@@ -279,7 +274,7 @@ bool QReadWriteLock::tryLockForRead(int timeout)
d = d_ptr.loadAcquire();
continue;
}
- return d->lockForRead(lock, timeout);
+ return d->lockForRead(timeout);
}
}
@@ -383,7 +378,7 @@ bool QReadWriteLock::tryLockForWrite(int timeout)
d = d_ptr.loadAcquire();
continue;
}
- return d->lockForWrite(lock, timeout);
+ return d->lockForWrite(timeout);
}
}
@@ -466,9 +461,9 @@ QReadWriteLock::StateForWaitCondition QReadWriteLock::stateForWaitCondition() co
}
-bool QReadWriteLockPrivate::lockForRead(std::unique_lock<std::mutex> &lock, int timeout)
+bool QReadWriteLockPrivate::lockForRead(int timeout)
{
- Q_ASSERT(!mutex.try_lock()); // mutex must be locked when entering this function
+ Q_ASSERT(!mutex.tryLock()); // mutex must be locked when entering this function
QElapsedTimer t;
if (timeout > 0)
@@ -482,10 +477,10 @@ bool QReadWriteLockPrivate::lockForRead(std::unique_lock<std::mutex> &lock, int
if (elapsed > timeout)
return false;
waitingReaders++;
- readerCond.wait_for(lock, ms{timeout - elapsed});
+ readerCond.wait(&mutex, timeout - elapsed);
} else {
waitingReaders++;
- readerCond.wait(lock);
+ readerCond.wait(&mutex);
}
waitingReaders--;
}
@@ -494,9 +489,9 @@ bool QReadWriteLockPrivate::lockForRead(std::unique_lock<std::mutex> &lock, int
return true;
}
-bool QReadWriteLockPrivate::lockForWrite(std::unique_lock<std::mutex> &lock, int timeout)
+bool QReadWriteLockPrivate::lockForWrite(int timeout)
{
- Q_ASSERT(!mutex.try_lock()); // mutex must be locked when entering this function
+ Q_ASSERT(!mutex.tryLock()); // mutex must be locked when entering this function
QElapsedTimer t;
if (timeout > 0)
@@ -511,15 +506,15 @@ bool QReadWriteLockPrivate::lockForWrite(std::unique_lock<std::mutex> &lock, int
if (waitingReaders && !waitingWriters && !writerCount) {
// We timed out and now there is no more writers or waiting writers, but some
// readers were queueud (probably because of us). Wake the waiting readers.
- readerCond.notify_all();
+ readerCond.wakeAll();
}
return false;
}
waitingWriters++;
- writerCond.wait_for(lock, ms{timeout - elapsed});
+ writerCond.wait(&mutex, timeout - elapsed);
} else {
waitingWriters++;
- writerCond.wait(lock);
+ writerCond.wait(&mutex);
}
waitingWriters--;
}
@@ -532,11 +527,11 @@ bool QReadWriteLockPrivate::lockForWrite(std::unique_lock<std::mutex> &lock, int
void QReadWriteLockPrivate::unlock()
{
- Q_ASSERT(!mutex.try_lock()); // mutex must be locked when entering this function
+ Q_ASSERT(!mutex.tryLock()); // mutex must be locked when entering this function
if (waitingWriters)
- writerCond.notify_one();
+ writerCond.wakeOne();
else if (waitingReaders)
- readerCond.notify_all();
+ readerCond.wakeAll();
}
bool QReadWriteLockPrivate::recursiveLockForRead(int timeout)
@@ -552,7 +547,7 @@ bool QReadWriteLockPrivate::recursiveLockForRead(int timeout)
return true;
}
- if (!lockForRead(lock, timeout))
+ if (!lockForRead(timeout))
return false;
currentReaders.insert(self, 1);
@@ -570,7 +565,7 @@ bool QReadWriteLockPrivate::recursiveLockForWrite(int timeout)
return true;
}
- if (!lockForWrite(lock, timeout))
+ if (!lockForWrite(timeout))
return false;
currentWriter = self;
diff --git a/src/corelib/thread/qreadwritelock_p.h b/src/corelib/thread/qreadwritelock_p.h
index b2e782f9ee..a4d002b7f2 100644
--- a/src/corelib/thread/qreadwritelock_p.h
+++ b/src/corelib/thread/qreadwritelock_p.h
@@ -54,9 +54,7 @@
#include <QtCore/private/qglobal_p.h>
#include <QtCore/qhash.h>
-
-#include <mutex>
-#include <condition_variable>
+#include <QtCore/qwaitcondition.h>
QT_REQUIRE_CONFIG(thread);
@@ -68,9 +66,9 @@ public:
explicit QReadWriteLockPrivate(bool isRecursive = false)
: recursive(isRecursive) {}
- std::mutex mutex;
- std::condition_variable writerCond;
- std::condition_variable readerCond;
+ QMutex mutex;
+ QWaitCondition writerCond;
+ QWaitCondition readerCond;
int readerCount = 0;
int writerCount = 0;
int waitingReaders = 0;
@@ -78,8 +76,8 @@ public:
const bool recursive;
//Called with the mutex locked
- bool lockForWrite(std::unique_lock<std::mutex> &lock, int timeout);
- bool lockForRead(std::unique_lock<std::mutex> &lock, int timeout);
+ bool lockForWrite(int timeout);
+ bool lockForRead(int timeout);
void unlock();
//memory management