https://github.com/python/cpython/commit/0b7814e0b638631fa2f5c81bcbab7b94064948d7
commit: 0b7814e0b638631fa2f5c81bcbab7b94064948d7
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2024-05-04T09:39:58+02:00
summary:

gh-110850: Use _PyDeadline_Get() in EnterNonRecursiveMutex() (#118556)

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.

files:
M Python/thread_nt.h

diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 9dca833ff203ca..425658131c2fce 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -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;
             }
         }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to