X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=pinger.c;h=d8f110ac7fad6cee8a73ba7ae0c5d9cd3e1031e2;hb=510f49e405e71ba5c97875e7a019364e1ef5fac9;hp=3f533ae6e0868c3721dda70ecb5b0b7cb8618e89;hpb=d5836982e23d8a6176114e1073469950c4eaae37;p=PuTTY.git diff --git a/pinger.c b/pinger.c index 3f533ae6..d8f110ac 100644 --- a/pinger.c +++ b/pinger.c @@ -8,7 +8,7 @@ struct pinger_tag { int interval; int pending; - unsigned long next; + unsigned long when_set, next; Backend *back; void *backhandle; }; @@ -28,7 +28,7 @@ static void pinger_timer(void *ctx, unsigned long now) static void pinger_schedule(Pinger pinger) { - int next; + unsigned long next; if (!pinger->interval) { pinger->pending = FALSE; /* cancel any pending ping */ @@ -37,8 +37,10 @@ static void pinger_schedule(Pinger pinger) next = schedule_timer(pinger->interval * TICKSPERSEC, pinger_timer, pinger); - if (!pinger->pending || next < pinger->next) { + if (!pinger->pending || + (next - pinger->when_set) < (pinger->next - pinger->when_set)) { pinger->next = next; + pinger->when_set = timing_last_clock(); pinger->pending = TRUE; } }