summaryrefslogtreecommitdiff
path: root/Modules/_threadmodule.c
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-10-01 13:29:25 +0200
committerGitHub <noreply@github.com>2021-10-01 13:29:25 +0200
commit833fdf126c8fe77fd17e8a8ffbc5c571b3bf64bd (patch)
tree7e4ed574b7cfb30c0ebb7585061134fee1b1f8ae /Modules/_threadmodule.c
parent54957f16a63ecb6b15f77b01fa7c55ada892604a (diff)
downloadcpython-git-833fdf126c8fe77fd17e8a8ffbc5c571b3bf64bd.tar.gz
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 'Modules/_threadmodule.c')
-rw-r--r--Modules/_threadmodule.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index fa7e6d0e09..543d82d0b9 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -84,13 +84,12 @@ lock_dealloc(lockobject *self)
static PyLockStatus
acquire_timed(PyThread_type_lock lock, _PyTime_t timeout)
{
- PyLockStatus r;
_PyTime_t endtime = 0;
-
if (timeout > 0) {
- endtime = _PyTime_GetMonotonicClock() + timeout;
+ endtime = _PyDeadline_Init(timeout);
}
+ PyLockStatus r;
do {
_PyTime_t microseconds;
microseconds = _PyTime_AsMicroseconds(timeout, _PyTime_ROUND_CEILING);
@@ -114,7 +113,7 @@ acquire_timed(PyThread_type_lock lock, _PyTime_t timeout)
/* If we're using a timeout, recompute the timeout after processing
* signals, since those can take time. */
if (timeout > 0) {
- timeout = endtime - _PyTime_GetMonotonicClock();
+ timeout = _PyDeadline_Get(endtime);
/* Check for negative values, since those mean block forever.
*/