diff --git a/src/libCom/osi/osiNTPTime.c b/src/libCom/osi/osiNTPTime.c index 909e6f121..0997cc42e 100644 --- a/src/libCom/osi/osiNTPTime.c +++ b/src/libCom/osi/osiNTPTime.c @@ -177,6 +177,19 @@ static void NTPTimeSync(void *dummy) continue; } + if (ntpDelta > 3600 && NTPTimePvt.synchronized) { + char nowTimeText[32]; + char ntpTimeText[32]; + epicsTimeToStrftime(ntpTimeText,sizeof(nowTimeText),"%Y-%m-%d %H:%M:%S.%09f", + &NTPTimePvt.syncTime); + epicsTimeToStrftime(ntpTimeText,sizeof(ntpTimeText),"%Y-%m-%d %H:%M:%S.%09f", + &timeNow); + errlogPrintf("NTPTimeSync: refuse to jump from %s to future %s (timespec: %li.%09li)\n", + nowTimeText, ntpTimeText, timespecNow.tv_sec, timespecNow.tv_nsec); + NTPTimePvt.synchronized = 0; + continue; + } + NTPTimePvt.syncsFailed = 0; if (!NTPTimePvt.synchronized) { errlogPrintf("NTPTimeSync: Sync recovered.\n"); @@ -274,6 +287,8 @@ int NTPTime_Report(int level) osdTickRateGet()); printf("Measured tick rate = %.3f Hz\n", NTPTimePvt.tickRate); + printf("Ticks to skip = %d ticks\n", + NTPTimePvt.ticksToSkip); osdNTPReport(); } } else {