X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=pinger.c;h=d8f110ac7fad6cee8a73ba7ae0c5d9cd3e1031e2;hb=991d30412d0911e7727a852d0a00ae0f1bec1b3e;hp=c9b750338eb57aade4f72780bf237b1a521a2e5f;hpb=7ecf13564a8d716000ce78146d1aaf4422432a4f;p=PuTTY.git diff --git a/pinger.c b/pinger.c index c9b75033..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,17 +37,19 @@ 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; } } -Pinger pinger_new(Config *cfg, Backend *back, void *backhandle) +Pinger pinger_new(Conf *conf, Backend *back, void *backhandle) { Pinger pinger = snew(struct pinger_tag); - pinger->interval = cfg->ping_interval; + pinger->interval = conf_get_int(conf, CONF_ping_interval); pinger->pending = FALSE; pinger->back = back; pinger->backhandle = backhandle; @@ -56,10 +58,11 @@ Pinger pinger_new(Config *cfg, Backend *back, void *backhandle) return pinger; } -void pinger_reconfig(Pinger pinger, Config *oldcfg, Config *newcfg) +void pinger_reconfig(Pinger pinger, Conf *oldconf, Conf *newconf) { - if (oldcfg->ping_interval != newcfg->ping_interval) { - pinger->interval = newcfg->ping_interval; + int newinterval = conf_get_int(newconf, CONF_ping_interval); + if (conf_get_int(oldconf, CONF_ping_interval) != newinterval) { + pinger->interval = newinterval; pinger_schedule(pinger); } }