summaryrefslogtreecommitdiffstats
path: root/Python/thread_nt.h
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-10-01 11:29:25 (GMT)
committerGitHub <noreply@github.com>2021-10-01 11:29:25 (GMT)
commit833fdf126c8fe77fd17e8a8ffbc5c571b3bf64bd (patch)
tree7e4ed574b7cfb30c0ebb7585061134fee1b1f8ae /Python/thread_nt.h
parent54957f16a63ecb6b15f77b01fa7c55ada892604a (diff)
downloadcpython-833fdf126c8fe77fd17e8a8ffbc5c571b3bf64bd.zip
cpython-833fdf126c8fe77fd17e8a8ffbc5c571b3bf64bd.tar.gz
cpython-833fdf126c8fe77fd17e8a8ffbc5c571b3bf64bd.tar.bz2
bpo-41710: Add private _PyDeadline_Get() function (GH-28674)
Add a private C API for deadlines: add _PyDeadline_Init() and _PyDeadline_Get() functions. * Add _PyTime_Add() and _PyTime_Mul() functions which compute t1+t2 and t1*t2 and clamp the result on overflow. * _PyTime_MulDiv() now uses _PyTime_Add() and _PyTime_Mul().
Diffstat (limited to 'Python/thread_nt.h')
-rw-r--r--Python/thread_nt.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 26f054f..0dde1a0 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -75,20 +75,20 @@ EnterNonRecursiveMutex(PNRMUTEX mutex, DWORD milliseconds)
}
}
} else if (milliseconds != 0) {
- /* wait at least until the target */
- _PyTime_t now = _PyTime_GetPerfCounter();
+ /* wait at least until the deadline */
_PyTime_t nanoseconds = _PyTime_FromNanoseconds((_PyTime_t)milliseconds * 1000000);
- _PyTime_t target = now + nanoseconds;
+ _PyTime_t deadline = _PyTime_Add(_PyTime_GetPerfCounter(), nanoseconds);
while (mutex->locked) {
- _PyTime_t microseconds = _PyTime_AsMicroseconds(nanoseconds, _PyTime_ROUND_TIMEOUT);
+ _PyTime_t microseconds = _PyTime_AsMicroseconds(nanoseconds,
+ _PyTime_ROUND_TIMEOUT);
if (PyCOND_TIMEDWAIT(&mutex->cv, &mutex->cs, microseconds) < 0) {
result = WAIT_FAILED;
break;
}
- now = _PyTime_GetPerfCounter();
- if (target <= now)
+ nanoseconds = deadline - _PyTime_GetPerfCounter();
+ if (nanoseconds <= 0) {
break;
- nanoseconds = target - now;
+ }
}
}
if (!mutex->locked) {