diff --git a/win32/time.c b/win32/time.c index ac1abbc9e9c7b..7c7c6c4205b96 100644 --- a/win32/time.c +++ b/win32/time.c @@ -67,13 +67,19 @@ PHPAPI int usleep(unsigned int useconds) {/*{{{*/ HANDLE timer; LARGE_INTEGER due; + DWORD wait_result; due.QuadPart = -(10 * (__int64)useconds); timer = CreateWaitableTimer(NULL, TRUE, NULL); SetWaitableTimer(timer, &due, 0, NULL, NULL, 0); - WaitForSingleObject(timer, INFINITE); + /* Alertable wait so queued APCs can interrupt it */ + wait_result = WaitForSingleObjectEx(timer, INFINITE, TRUE); CloseHandle(timer); + if (wait_result == WAIT_IO_COMPLETION) { + errno = EINTR; + return -1; + } return 0; }/*}}}*/