Index: Python/ceval_gil.h =================================================================== --- Python/ceval_gil.h (revision 82989) +++ Python/ceval_gil.h (working copy) @@ -172,9 +172,7 @@ /* auto-reset, non-signalled */ \ if (!(cond = CreateEvent(NULL, FALSE, FALSE, NULL))) { \ Py_FatalError("CreateMutex(" #cond ") failed"); }; -#define COND_RESET(cond) \ - if (!ResetEvent(cond)) { \ - Py_FatalError("ResetEvent(" #cond ") failed"); }; +#define COND_RESET(cond) #define COND_SIGNAL(cond) \ if (!SetEvent(cond)) { \ Py_FatalError("SetEvent(" #cond ") failed"); }; @@ -186,18 +184,17 @@ } #define COND_TIMED_WAIT(cond, mut, microseconds, timeout_result) \ { \ - DWORD r; \ - HANDLE objects[2] = { cond, mut }; \ - MUTEX_UNLOCK(mut); \ - r = WaitForMultipleObjects(2, objects, TRUE, microseconds / 1000); \ + DWORD r = SignalObjectAndWait(mut, cond, microseconds / 1000, FALSE); \ if (r == WAIT_TIMEOUT) { \ MUTEX_LOCK(mut); \ timeout_result = 1; \ } \ else if (r != WAIT_OBJECT_0) \ - Py_FatalError("WaitForSingleObject(" #cond ") failed"); \ - else \ + Py_FatalError("SignalObjectAndWait(" #mut ", " #cond") failed"); \ + else { \ + MUTEX_LOCK(mut); \ timeout_result = 0; \ + } \ } #else