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.
This commit is contained in:
Victor Stinner 2024-05-04 09:39:58 +02:00 committed by GitHub
parent 42dc5b4ace
commit 0b7814e0b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 6 deletions

View 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;
}
}