aboutsummaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2021-10-01 13:03:03 +0200
committerGitHub <noreply@github.com>2021-10-01 13:03:03 +0200
commit98d282700221234157159df4af76423d89490ad9 (patch)
tree5f552e24b2945e6db9fa750afe4a3d135b6bb546 /Python
parent746d648d47d12d16c2afedaeff626fc6aaaf6a46 (diff)
downloadcpython3-98d282700221234157159df4af76423d89490ad9.tar.gz
bpo-41710: Fix PY_TIMEOUT_MAX on Windows (GH-28673)
WaitForSingleObject() accepts timeout in milliseconds in the range [0; 0xFFFFFFFE] (DWORD type). INFINITE value (0xFFFFFFFF) means no timeout. 0xFFFFFFFE milliseconds is around 49.7 days. PY_TIMEOUT_MAX is (0xFFFFFFFE * 1000) milliseconds on Windows, around 49.7 days. Partially revert commit 37b8294d6295ca12553fd7c98778be71d24f4b24.
Diffstat (limited to 'Python')
-rw-r--r--Python/thread_nt.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index 0beb3d3af2..26f054ff0c 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -292,9 +292,10 @@ PyThread_free_lock(PyThread_type_lock aLock)
FreeNonRecursiveMutex(aLock) ;
}
-// WaitForSingleObject() documentation: "The time-out value needs to be a
-// positive number between 0 and 0x7FFFFFFF." INFINITE is equal to 0xFFFFFFFF.
-const DWORD TIMEOUT_MS_MAX = 0x7FFFFFFF;
+// WaitForSingleObject() accepts timeout in milliseconds in the range
+// [0; 0xFFFFFFFE] (DWORD type). INFINITE value (0xFFFFFFFF) means no
+// timeout. 0xFFFFFFFE milliseconds is around 49.7 days.
+const DWORD TIMEOUT_MS_MAX = 0xFFFFFFFE;
/*
* Return 1 on success if the lock was acquired
@@ -322,12 +323,11 @@ PyThread_acquire_lock_timed(PyThread_type_lock aLock,
// overflow to the caller, so clamp the timeout to
// [0, TIMEOUT_MS_MAX] milliseconds.
//
- // TIMEOUT_MS_MAX milliseconds is around 24.9 days.
- //
// _thread.Lock.acquire() and _thread.RLock.acquire() raise an
// OverflowError if microseconds is greater than PY_TIMEOUT_MAX.
milliseconds = TIMEOUT_MS_MAX;
}
+ assert(milliseconds != INFINITE);
}
else {
milliseconds = INFINITE;