mirror of
https://github.com/git/git.git
synced 2026-01-17 22:26:32 +00:00
Merge 'mingw-safer-compat-poll'
This was pull request #1003 from shoelzer/master poll: Use GetTickCount64 to avoid wraparound issues Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
@@ -266,6 +266,20 @@ win32_compute_revents_socket (SOCKET h, int sought, long lNetworkEvents)
|
||||
return happened;
|
||||
}
|
||||
|
||||
#include <windows.h>
|
||||
#include "compat/win32/lazyload.h"
|
||||
|
||||
static ULONGLONG CompatGetTickCount64(void)
|
||||
{
|
||||
DECLARE_PROC_ADDR(kernel32.dll, ULONGLONG, GetTickCount64, void);
|
||||
|
||||
if (!INIT_PROC_ADDR(GetTickCount64))
|
||||
return (ULONGLONG)GetTickCount();
|
||||
|
||||
return GetTickCount64();
|
||||
}
|
||||
#define GetTickCount64 CompatGetTickCount64
|
||||
|
||||
#else /* !MinGW */
|
||||
|
||||
/* Convert select(2) returned fd_sets into poll(2) revents values. */
|
||||
@@ -449,7 +463,8 @@ 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, start = 0, elapsed, orig_timeout = 0;
|
||||
DWORD ret, wait_timeout, nhandles, elapsed, orig_timeout = 0;
|
||||
ULONGLONG start = 0;
|
||||
fd_set rfds, wfds, xfds;
|
||||
BOOL poll_again;
|
||||
MSG msg;
|
||||
@@ -465,7 +480,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
|
||||
if (timeout != INFTIM)
|
||||
{
|
||||
orig_timeout = timeout;
|
||||
start = GetTickCount();
|
||||
start = GetTickCount64();
|
||||
}
|
||||
|
||||
if (!hEvent)
|
||||
@@ -614,7 +629,7 @@ restart:
|
||||
|
||||
if (!rc && orig_timeout && timeout != INFTIM)
|
||||
{
|
||||
elapsed = GetTickCount() - start;
|
||||
elapsed = (DWORD)(GetTickCount64() - start);
|
||||
timeout = elapsed >= orig_timeout ? 0 : orig_timeout - elapsed;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user