diff options
author | Andrew Rogers <32688592+adr26@users.noreply.github.com> | 2024-02-02 13:50:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-02 13:50:51 (GMT) |
commit | b3f0b698daf2438a6e59d5d19ccb34acdba0bffc (patch) | |
tree | c13e5926d093a35c2e7b63b525af2ef5b4733fe3 /Python/condvar.h | |
parent | d29f57f6036353b4e705a42637177442bf7e07e5 (diff) | |
download | cpython-b3f0b698daf2438a6e59d5d19ccb34acdba0bffc.zip cpython-b3f0b698daf2438a6e59d5d19ccb34acdba0bffc.tar.gz cpython-b3f0b698daf2438a6e59d5d19ccb34acdba0bffc.tar.bz2 |
gh-104530: Enable native Win32 condition variables by default (GH-104531)
Diffstat (limited to 'Python/condvar.h')
-rw-r--r-- | Python/condvar.h | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/Python/condvar.h b/Python/condvar.h index d54db94..dcabed6 100644 --- a/Python/condvar.h +++ b/Python/condvar.h @@ -260,13 +260,13 @@ PyMUTEX_UNLOCK(PyMUTEX_T *cs) return 0; } - Py_LOCAL_INLINE(int) PyCOND_INIT(PyCOND_T *cv) { InitializeConditionVariable(cv); return 0; } + Py_LOCAL_INLINE(int) PyCOND_FINI(PyCOND_T *cv) { @@ -279,27 +279,32 @@ PyCOND_WAIT(PyCOND_T *cv, PyMUTEX_T *cs) return SleepConditionVariableSRW(cv, cs, INFINITE, 0) ? 0 : -1; } -/* This implementation makes no distinction about timeouts. Signal - * 2 to indicate that we don't know. - */ +/* return 0 for success, 1 on timeout, -1 on error */ Py_LOCAL_INLINE(int) PyCOND_TIMEDWAIT(PyCOND_T *cv, PyMUTEX_T *cs, long long us) { - return SleepConditionVariableSRW(cv, cs, (DWORD)(us/1000), 0) ? 2 : -1; + BOOL success = SleepConditionVariableSRW(cv, cs, (DWORD)(us/1000), 0); + if (!success) { + if (GetLastError() == ERROR_TIMEOUT) { + return 1; + } + return -1; + } + return 0; } Py_LOCAL_INLINE(int) PyCOND_SIGNAL(PyCOND_T *cv) { - WakeConditionVariable(cv); - return 0; + WakeConditionVariable(cv); + return 0; } Py_LOCAL_INLINE(int) PyCOND_BROADCAST(PyCOND_T *cv) { - WakeAllConditionVariable(cv); - return 0; + WakeAllConditionVariable(cv); + return 0; } |