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...
This commit is contained in:
Andrew Johnson
2010-10-20 11:44:48 -05:00
parent 3df265103d
commit f1a00dd667

View File

@@ -149,6 +149,7 @@ static void NTPTimeSync(void *dummy)
epicsTimeStamp timeNow;
epicsUInt32 tickNow;
double diff;
double ntpDelta;
status = osdNTPGet(&timespecNow);
tickNow = osdTickGet();
@@ -163,13 +164,21 @@ static void NTPTimeSync(void *dummy)
continue;
}
epicsTimeFromTimespec(&timeNow, &timespecNow);
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, &timespecNow);
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;
}