diff --git a/src/libCom/osi/osiNTPTime.c b/src/libCom/osi/osiNTPTime.c index a5676d402..d085cca31 100644 --- a/src/libCom/osi/osiNTPTime.c +++ b/src/libCom/osi/osiNTPTime.c @@ -99,10 +99,12 @@ static void NTPTime_InitOnce(void *pprio) /* Try to sync with NTP server */ if (!osdNTPGet(×pecNow)) { NTPTimePvt.syncTick = osdTickGet(); - epicsTimeFromTimespec(&NTPTimePvt.syncTime, ×pecNow); - NTPTimePvt.clockTick = NTPTimePvt.syncTick; - NTPTimePvt.clockTime = NTPTimePvt.syncTime; - NTPTimePvt.synchronized = 1; + if (timespecNow.tv_sec > POSIX_TIME_AT_EPICS_EPOCH && epicsTimeOK == + epicsTimeFromTimespec(&NTPTimePvt.syncTime, ×pecNow)) { + NTPTimePvt.clockTick = NTPTimePvt.syncTick; + NTPTimePvt.clockTime = NTPTimePvt.syncTime; + NTPTimePvt.synchronized = 1; + } } /* Start the sync thread */ @@ -164,9 +166,14 @@ static void NTPTimeSync(void *dummy) continue; } - epicsTimeFromTimespec(&timeNow, ×pecNow); - ntpDelta = epicsTimeDiffInSeconds(&timeNow, &NTPTimePvt.syncTime); + if (timespecNow.tv_sec <= POSIX_TIME_AT_EPICS_EPOCH || + epicsTimeFromTimespec(&timeNow, ×pecNow) == epicsTimeERROR) { + errlogPrintf("NTPTimeSync: Bad time received from NTP server\n"); + NTPTimePvt.synchronized = 0; + continue; + } + ntpDelta = epicsTimeDiffInSeconds(&timeNow, &NTPTimePvt.syncTime); if (ntpDelta <= 0.0 && NTPTimePvt.synchronized) { errlogPrintf("NTPTimeSync: NTP time not increasing, delta = %g\n", ntpDelta);