X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=pinger.c;h=d8f110ac7fad6cee8a73ba7ae0c5d9cd3e1031e2;hb=b0b5d5fbe63e982d6a230269a2e2a823e2586512;hp=3e2626f562b3e9386067d613b249f8860425dc09;hpb=a1f3b7a358adaa7c2a98359cd0373aa823eeb14b;p=PuTTY.git diff --git a/pinger.c b/pinger.c index 3e2626f5..d8f110ac 100644 --- a/pinger.c +++ b/pinger.c @@ -8,18 +8,18 @@ struct pinger_tag { int interval; int pending; - long next; + unsigned long when_set, next; Backend *back; void *backhandle; }; static void pinger_schedule(Pinger pinger); -static void pinger_timer(void *ctx, long now) +static void pinger_timer(void *ctx, unsigned long now) { Pinger pinger = (Pinger)ctx; - if (pinger->pending && now - pinger->next >= 0) { + if (pinger->pending && now == pinger->next) { pinger->back->special(pinger->backhandle, TS_PING); pinger->pending = FALSE; pinger_schedule(pinger); @@ -28,7 +28,7 @@ static void pinger_timer(void *ctx, 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; } }