Two related changes to timing code:
[u/mdw/putty] / unix / uxplink.c
index 61b9426..0d89622 100644 (file)
@@ -593,7 +593,7 @@ int main(int argc, char **argv)
     int errors;
     int use_subsystem = 0;
     int got_host = FALSE;
-    long now;
+    unsigned long now;
     struct winsize size;
 
     fdlist = NULL;
@@ -1016,12 +1016,17 @@ int main(int argc, char **argv)
        }
 
        do {
-           long next, ticks;
+           unsigned long next, then;
+           long ticks;
            struct timeval tv, *ptv;
 
            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;
                tv.tv_sec = ticks / 1000;
                tv.tv_usec = ticks % 1000 * 1000;
                ptv = &tv;