Step system time in RTC preinit only with offsets over 1 second
This commit is contained in:
parent
2be89bc6f2
commit
91c9f84a01
1 changed files with 13 additions and 6 deletions
19
rtc_linux.c
19
rtc_linux.c
|
@ -935,7 +935,7 @@ RTC_Linux_TimePreInit(void)
|
||||||
time_t rtc_t, estimated_correct_rtc_t;
|
time_t rtc_t, estimated_correct_rtc_t;
|
||||||
long interval;
|
long interval;
|
||||||
double accumulated_error = 0.0;
|
double accumulated_error = 0.0;
|
||||||
struct timeval new_sys_time;
|
struct timeval new_sys_time, old_sys_time;
|
||||||
|
|
||||||
coefs_file_name = CNF_GetRtcFile();
|
coefs_file_name = CNF_GetRtcFile();
|
||||||
|
|
||||||
|
@ -970,8 +970,6 @@ RTC_Linux_TimePreInit(void)
|
||||||
accumulated_error = file_ref_offset + (double)(interval) * 1.0e-6 * file_rate_ppm;
|
accumulated_error = file_ref_offset + (double)(interval) * 1.0e-6 * file_rate_ppm;
|
||||||
|
|
||||||
/* Correct time */
|
/* Correct time */
|
||||||
LOG(LOGS_INFO, LOGF_RtcLinux, "Set system time, error in RTC = %f",
|
|
||||||
accumulated_error);
|
|
||||||
estimated_correct_rtc_t = rtc_t - (long)(0.5 + accumulated_error);
|
estimated_correct_rtc_t = rtc_t - (long)(0.5 + accumulated_error);
|
||||||
} else {
|
} else {
|
||||||
estimated_correct_rtc_t = rtc_t - (long)(0.5 + accumulated_error);
|
estimated_correct_rtc_t = rtc_t - (long)(0.5 + accumulated_error);
|
||||||
|
@ -980,9 +978,18 @@ RTC_Linux_TimePreInit(void)
|
||||||
new_sys_time.tv_sec = estimated_correct_rtc_t;
|
new_sys_time.tv_sec = estimated_correct_rtc_t;
|
||||||
new_sys_time.tv_usec = 0;
|
new_sys_time.tv_usec = 0;
|
||||||
|
|
||||||
/* Tough luck if this fails */
|
/* Set system time only if the step is larger than 1 second */
|
||||||
if (settimeofday(&new_sys_time, NULL) < 0) {
|
if (!(gettimeofday(&old_sys_time, NULL) < 0) &&
|
||||||
LOG(LOGS_WARN, LOGF_RtcLinux, "Could not settimeofday");
|
(old_sys_time.tv_sec - new_sys_time.tv_sec > 1 ||
|
||||||
|
old_sys_time.tv_sec - new_sys_time.tv_sec < -1)) {
|
||||||
|
|
||||||
|
LOG(LOGS_INFO, LOGF_RtcLinux, "Set system time, error in RTC = %f",
|
||||||
|
accumulated_error);
|
||||||
|
|
||||||
|
/* Tough luck if this fails */
|
||||||
|
if (settimeofday(&new_sys_time, NULL) < 0) {
|
||||||
|
LOG(LOGS_WARN, LOGF_RtcLinux, "Could not settimeofday");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG(LOGS_WARN, LOGF_RtcLinux, "Could not convert RTC reading to seconds since 1/1/1970");
|
LOG(LOGS_WARN, LOGF_RtcLinux, "Could not convert RTC reading to seconds since 1/1/1970");
|
||||||
|
|
Loading…
Reference in a new issue