X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/ee07dce4bc01900faf5c9b14e14803705e239b5d..88ea89339783ee587180b645981967f6cb8bcd20:/windows/winsftp.c diff --git a/windows/winsftp.c b/windows/winsftp.c index e6b55c1d..33acaf62 100644 --- a/windows/winsftp.c +++ b/windows/winsftp.c @@ -486,15 +486,20 @@ extern int select_result(WPARAM, LPARAM); int do_eventsel_loop(HANDLE other_event) { int n, nhandles, nallhandles, netindex, otherindex; - long next, ticks; + unsigned long next, then; + long ticks; HANDLE *handles; SOCKET *sklist; int skcount; - long now = GETTICKCOUNT(); + unsigned long now = GETTICKCOUNT(); if (run_timers(now, &next)) { - ticks = next - GETTICKCOUNT(); - if (ticks < 0) ticks = 0; /* just in case */ + then = now; + now = GETTICKCOUNT(); + if (now - then > next - then) + ticks = 0; + else + ticks = next - now; } else { ticks = INFINITE; } @@ -606,7 +611,7 @@ int ssh_sftp_loop_iteration(void) if (p_WSAEventSelect == NULL) { fd_set readfds; int ret; - long now = GETTICKCOUNT(); + unsigned long now = GETTICKCOUNT(), then; if (sftp_ssh_socket == INVALID_SOCKET) return -1; /* doom */ @@ -615,13 +620,17 @@ int ssh_sftp_loop_iteration(void) select_result((WPARAM) sftp_ssh_socket, (LPARAM) FD_WRITE); do { - long next, ticks; + unsigned long next; + long ticks; struct timeval tv, *ptv; if (run_timers(now, &next)) { - ticks = next - GETTICKCOUNT(); - if (ticks <= 0) - ticks = 1; /* just in case */ + then = now; + now = GETTICKCOUNT(); + if (now - then > next - then) + ticks = 0; + else + ticks = next - now; tv.tv_sec = ticks / 1000; tv.tv_usec = ticks % 1000 * 1000; ptv = &tv;