зеркало из https://github.com/microsoft/git.git
Merge branch 'et/win32-poll-timeout'
* et/win32-poll-timeout: poll: honor the timeout on Win32
This commit is contained in:
Коммит
8d45eefe3e
|
@ -446,7 +446,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
|
|||
static HANDLE hEvent;
|
||||
WSANETWORKEVENTS ev;
|
||||
HANDLE h, handle_array[FD_SETSIZE + 2];
|
||||
DWORD ret, wait_timeout, nhandles;
|
||||
DWORD ret, wait_timeout, nhandles, start = 0, elapsed, orig_timeout = 0;
|
||||
fd_set rfds, wfds, xfds;
|
||||
BOOL poll_again;
|
||||
MSG msg;
|
||||
|
@ -459,6 +459,12 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (timeout != INFTIM)
|
||||
{
|
||||
orig_timeout = timeout;
|
||||
start = GetTickCount();
|
||||
}
|
||||
|
||||
if (!hEvent)
|
||||
hEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
|
||||
|
||||
|
@ -603,7 +609,13 @@ restart:
|
|||
rc++;
|
||||
}
|
||||
|
||||
if (!rc && timeout == INFTIM)
|
||||
if (!rc && orig_timeout && timeout != INFTIM)
|
||||
{
|
||||
elapsed = GetTickCount() - start;
|
||||
timeout = elapsed >= orig_timeout ? 0 : orig_timeout - elapsed;
|
||||
}
|
||||
|
||||
if (!rc && timeout)
|
||||
{
|
||||
SleepEx (1, TRUE);
|
||||
goto restart;
|
||||
|
|
Загрузка…
Ссылка в новой задаче