diff options
Diffstat (limited to 'src/corelib/thread/qmutex.cpp')
-rw-r--r-- | src/corelib/thread/qmutex.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index b794d79e23..7058e890e0 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -673,12 +673,13 @@ bool QBasicMutex::lockInternal(int timeout) QT_MUTEX_LOCK_NOEXCEPT */ bool QBasicMutex::lockInternal(QDeadlineTimer deadlineTimer) QT_MUTEX_LOCK_NOEXCEPT { - qint64 remainingTime = deadlineTimer.remainingTimeNSecs(); - if (remainingTime == 0) + using namespace std::chrono; + nanoseconds remainingTime = deadlineTimer.remainingTimeAsDuration(); + if (remainingTime == 0ns) return false; if (futexAvailable()) { - if (Q_UNLIKELY(remainingTime < 0)) { // deadlineTimer.isForever() + if (Q_UNLIKELY(deadlineTimer.isForever())) { lockInternal(); return true; } @@ -689,7 +690,7 @@ bool QBasicMutex::lockInternal(QDeadlineTimer deadlineTimer) QT_MUTEX_LOCK_NOEXC if (d_ptr.fetchAndStoreAcquire(dummyFutexValue()) == nullptr) return true; - Q_FOREVER { + for (;;) { if (!futexWait(d_ptr, dummyFutexValue(), remainingTime)) return false; @@ -700,8 +701,8 @@ bool QBasicMutex::lockInternal(QDeadlineTimer deadlineTimer) QT_MUTEX_LOCK_NOEXC return true; // calculate the remaining time - remainingTime = deadlineTimer.remainingTimeNSecs(); - if (remainingTime <= 0) + remainingTime = deadlineTimer.remainingTimeAsDuration(); + if (remainingTime == 0ns) return false; } } @@ -713,7 +714,7 @@ bool QBasicMutex::lockInternal(QDeadlineTimer deadlineTimer) QT_MUTEX_LOCK_NOEXC continue; if (copy == dummyLocked()) { - if (remainingTime == 0) + if (remainingTime == 0ns) return false; // The mutex is locked but does not have a QMutexPrivate yet. // we need to allocate a QMutexPrivate @@ -728,7 +729,7 @@ bool QBasicMutex::lockInternal(QDeadlineTimer deadlineTimer) QT_MUTEX_LOCK_NOEXC } QMutexPrivate *d = static_cast<QMutexPrivate *>(copy); - if (remainingTime == 0 && !d->possiblyUnlocked.loadRelaxed()) + if (remainingTime == 0ns && !d->possiblyUnlocked.loadRelaxed()) return false; // At this point we have a pointer to a QMutexPrivate. But the other thread @@ -790,7 +791,7 @@ bool QBasicMutex::lockInternal(QDeadlineTimer deadlineTimer) QT_MUTEX_LOCK_NOEXC Q_ASSERT(d == d_ptr.loadRelaxed()); return true; } else { - Q_ASSERT(remainingTime >= 0); + Q_ASSERT(remainingTime >= 0ns); // timed out d->derefWaiters(1); //There may be a race in which the mutex is unlocked right after we timed out, |