From: Miroslav Lichvar Date: Fri, 14 Jul 2017 10:43:26 +0000 (+0200) Subject: ntp: ignore saved remote poll when peer is not responding X-Git-Tag: 3.2-pre1~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0f789425bb71422190b03f23ed375dc0959990d;p=thirdparty%2Fchrony.git ntp: ignore saved remote poll when peer is not responding When a peer stops responding, allow our actual polling interval to be longer than poll saved from the last valid response. --- diff --git a/ntp_core.c b/ntp_core.c index f916fffa..35ef9f3b 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -260,6 +260,9 @@ static ARR_Instance broadcasts; /* Maximum poll interval set by KoD RATE */ #define MAX_KOD_RATE_POLL SRC_DEFAULT_MAXPOLL +/* Maximum number of missed responses to follow peer's polling interval */ +#define MAX_PEER_POLL_TX 8 + /* Invalid socket, different from the one in ntp_io.c */ #define INVALID_SOCK_FD -2 @@ -781,10 +784,8 @@ get_transmit_delay(NCR_Instance inst, int on_tx, double last_tx) /* Use shorter of the local and remote poll interval, but not shorter than the allowed minimum */ poll_to_use = inst->local_poll; - if (poll_to_use > inst->remote_poll) - poll_to_use = inst->remote_poll; - if (poll_to_use < inst->minpoll) - poll_to_use = inst->minpoll; + if (poll_to_use > inst->remote_poll && inst->tx_count < MAX_PEER_POLL_TX) + poll_to_use = MAX(inst->remote_poll, inst->minpoll); delay_time = UTI_Log2ToDouble(poll_to_use);