From f1a00dd66736e2bf3ce256a1a569790097008fea Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 20 Oct 2010 11:44:48 -0500 Subject: [PATCH] libCom/osi: Warn if NTP time stops or decreases. Add warnings if the NTP time provider sees NTP time stopping or going backwards. Should never happen, but... --- src/libCom/osi/osiNTPTime.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libCom/osi/osiNTPTime.c b/src/libCom/osi/osiNTPTime.c index e3417792f..a5676d402 100644 --- a/src/libCom/osi/osiNTPTime.c +++ b/src/libCom/osi/osiNTPTime.c @@ -149,6 +149,7 @@ static void NTPTimeSync(void *dummy) epicsTimeStamp timeNow; epicsUInt32 tickNow; double diff; + double ntpDelta; status = osdNTPGet(×pecNow); tickNow = osdTickGet(); @@ -163,13 +164,21 @@ static void NTPTimeSync(void *dummy) continue; } + epicsTimeFromTimespec(&timeNow, ×pecNow); + ntpDelta = epicsTimeDiffInSeconds(&timeNow, &NTPTimePvt.syncTime); + + if (ntpDelta <= 0.0 && NTPTimePvt.synchronized) { + errlogPrintf("NTPTimeSync: NTP time not increasing, delta = %g\n", + ntpDelta); + NTPTimePvt.synchronized = 0; + continue; + } + NTPTimePvt.syncsFailed = 0; if (!NTPTimePvt.synchronized) { errlogPrintf("NTPTimeSync: Sync recovered.\n"); } - epicsTimeFromTimespec(&timeNow, ×pecNow); - epicsMutexMustLock(NTPTimePvt.lock); diff = epicsTimeDiffInSeconds(&timeNow, &NTPTimePvt.clockTime); if (diff >= 0.0) { @@ -182,8 +191,7 @@ static void NTPTimeSync(void *dummy) NTPTimePvt.synchronized = 1; epicsMutexUnlock(NTPTimePvt.lock); - NTPTimePvt.tickRate = (tickNow - NTPTimePvt.syncTick) / - epicsTimeDiffInSeconds(&timeNow, &NTPTimePvt.syncTime); + NTPTimePvt.tickRate = (tickNow - NTPTimePvt.syncTick) / ntpDelta; NTPTimePvt.syncTick = tickNow; NTPTimePvt.syncTime = timeNow; }