]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-110850: Use _PyDeadline_Get() in EnterNonRecursiveMutex() (#118556)
authorVictor Stinner <vstinner@python.org>
Sat, 4 May 2024 07:39:58 +0000 (09:39 +0200)
committerGitHub <noreply@github.com>
Sat, 4 May 2024 07:39:58 +0000 (09:39 +0200)
Use _PyDeadline_Init() and _PyDeadline_Get() in
EnterNonRecursiveMutex() of thread_nt.h.

_PyDeadline_Get() uses the monotonic clock which is now the same as
the perf counter clock on all platforms. So this change does not
cause any behavior change. It just reuses existing helper functions.

Python/thread_nt.h

index 9dca833ff203ca99a28d92b9997f65ed4c1b972c..425658131c2fce95ecb0eece76042f6bbef16a71 100644 (file)
@@ -77,17 +77,18 @@ EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds)
         }
     } else if (milliseconds != 0) {
         /* wait at least until the deadline */
-        PyTime_t nanoseconds = (PyTime_t)milliseconds * (1000 * 1000);
-        PyTime_t deadline = _PyTime_Add(_PyTime_PerfCounterUnchecked(), nanoseconds);
+        PyTime_t timeout = (PyTime_t)milliseconds * (1000 * 1000);
+        PyTime_t deadline = _PyDeadline_Init(timeout);
         while (mutex->locked) {
-            PyTime_t microseconds = _PyTime_AsMicroseconds(nanoseconds,
-                                                            _PyTime_ROUND_TIMEOUT);
+            PyTime_t microseconds = _PyTime_AsMicroseconds(timeout,
+                                                           _PyTime_ROUND_TIMEOUT);
             if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, microseconds) < 0) {
                 result = WAIT_FAILED;
                 break;
             }
-            nanoseconds = deadline - _PyTime_PerfCounterUnchecked();
-            if (nanoseconds <= 0) {
+
+            timeout = _PyDeadline_Get(deadline);
+            if (timeout <= 0) {
                 break;
             }
         }