@@ -260,13 +260,13 @@ PyMUTEX_UNLOCK(PyMUTEX_T *cs)
260260 return 0 ;
261261}
262262
263-
264263Py_LOCAL_INLINE (int )
265264PyCOND_INIT (PyCOND_T * cv )
266265{
267266 InitializeConditionVariable (cv );
268267 return 0 ;
269268}
269+
270270Py_LOCAL_INLINE (int )
271271PyCOND_FINI (PyCOND_T * cv )
272272{
@@ -279,27 +279,32 @@ PyCOND_WAIT(PyCOND_T *cv, PyMUTEX_T *cs)
279279 return SleepConditionVariableSRW (cv , cs , INFINITE , 0 ) ? 0 : -1 ;
280280}
281281
282- /* This implementation makes no distinction about timeouts. Signal
283- * 2 to indicate that we don't know.
284- */
282+ /* return 0 for success, 1 on timeout, -1 on error */
285283Py_LOCAL_INLINE (int )
286284PyCOND_TIMEDWAIT (PyCOND_T * cv , PyMUTEX_T * cs , long long us )
287285{
288- return SleepConditionVariableSRW (cv , cs , (DWORD )(us /1000 ), 0 ) ? 2 : -1 ;
286+ BOOL success = SleepConditionVariableSRW (cv , cs , (DWORD )(us /1000 ), 0 );
287+ if (!success ) {
288+ if (GetLastError () == ERROR_TIMEOUT ) {
289+ return 1 ;
290+ }
291+ return -1 ;
292+ }
293+ return 0 ;
289294}
290295
291296Py_LOCAL_INLINE (int )
292297PyCOND_SIGNAL (PyCOND_T * cv )
293298{
294- WakeConditionVariable (cv );
295- return 0 ;
299+ WakeConditionVariable (cv );
300+ return 0 ;
296301}
297302
298303Py_LOCAL_INLINE (int )
299304PyCOND_BROADCAST (PyCOND_T * cv )
300305{
301- WakeAllConditionVariable (cv );
302- return 0 ;
306+ WakeAllConditionVariable (cv );
307+ return 0 ;
303308}
304309
305310
0 commit comments