diff options
| author | Ahmad Samir <a.samirh78@gmail.com> | 2022-10-31 12:50:39 +0200 |
|---|---|---|
| committer | Ahmad Samir <a.samirh78@gmail.com> | 2023-06-09 17:45:14 +0300 |
| commit | 3e7d68a6f429b7cbac4e0ae41c7ad7d4747fb2c2 (patch) | |
| tree | f889b256f5c878dae4f5e70a9272c635fceb2f6e /src/corelib/thread/qmutex.cpp | |
| parent | 71c9b9f05b9e3d0d655db33e75207a90509849e1 (diff) | |
QtLinuxFutex, QBasicMutex, QSemaphore: use chrono for time arithmetic
Done-With: Thiago Macieira <thiago.macieira@intel.com>
Change-Id: I7c696d58ee596254f91bcd131fe884b6e6ef0852
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
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 b794d79e23f..7058e890e04 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, |
