Skip to content

Commit

Permalink
poll: Use GetTickCount64 to avoid wraparound issues
Browse files Browse the repository at this point in the history
From Visual Studio 2015 Code Analysis: Warning C28159 Consider using
'GetTickCount64' instead of 'GetTickCount'.

Reason: GetTickCount overflows roughly every 49 days. Code that does not
take that into account can loop indefinitely. GetTickCount64 operates on
64 bit values and does not have that problem.

Signed-off-by: Steve Hoelzer <[email protected]>
  • Loading branch information
shoelzer authored and dscho committed Jan 18, 2017
1 parent 631917c commit 8b7aa98
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions compat/poll/poll.c
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,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;
Expand All @@ -462,7 +463,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)
if (timeout != INFTIM)
{
orig_timeout = timeout;
start = GetTickCount();
start = GetTickCount64();
}

if (!hEvent)
Expand Down Expand Up @@ -611,7 +612,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout)

if (!rc && orig_timeout && timeout != INFTIM)
{
elapsed = GetTickCount() - start;
elapsed = (DWORD)(GetTickCount64() - start);
timeout = elapsed >= orig_timeout ? 0 : orig_timeout - elapsed;
}

Expand Down

0 comments on commit 8b7aa98

Please sign in to comment.