From 1faeb45063c99de479a58ceb8e80e91dd8c508ab Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 11 Aug 2010 17:16:16 +0200 Subject: [PATCH] Update offset correction errors only when needed --- local.c | 7 +------ sys_linux.c | 9 ++++++--- sys_netbsd.c | 3 ++- sys_solaris.c | 3 ++- sys_sunos.c | 3 ++- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/local.c b/local.c index c5b6383..ad0aa34 100644 --- a/local.c +++ b/local.c @@ -349,13 +349,8 @@ LCL_CookTime(struct timeval *raw, struct timeval *cooked, double *err) void LCL_GetOffsetCorrection(struct timeval *raw, double *correction, double *err) { - double e; - /* Call system specific driver to get correction */ - (*drv_offset_convert)(raw, correction, &e); - - if (err) - *err = e; + (*drv_offset_convert)(raw, correction, err); } /* ================================================== */ diff --git a/sys_linux.c b/sys_linux.c index 48eeeb8..8567df9 100644 --- a/sys_linux.c +++ b/sys_linux.c @@ -800,7 +800,6 @@ get_offset_correction(struct timeval *raw, slow_slewing = 0; } } - update_slow_slew_error(offset); if (!nano_slewing) { noffset = 0; @@ -812,7 +811,6 @@ get_offset_correction(struct timeval *raw, nano_slewing = 0; } } - update_nano_slew_error(noffset, 0); if (fast_slewing) { UTI_DiffTimevalsToDouble(&fast_slew_duration, raw, &slew_start_tv); @@ -824,7 +822,12 @@ get_offset_correction(struct timeval *raw, } *corr = - (offset_register + fast_slew_remaining) + offset / 1.0e6 + noffset / 1.0e9; - *err = get_slow_slew_error(raw) + get_fast_slew_error(raw) + get_nano_slew_error();; + + if (err) { + update_slow_slew_error(offset); + update_nano_slew_error(noffset, 0); + *err = get_slow_slew_error(raw) + get_fast_slew_error(raw) + get_nano_slew_error();; + } return; } diff --git a/sys_netbsd.c b/sys_netbsd.c index 04b3f92..8c0cacc 100644 --- a/sys_netbsd.c +++ b/sys_netbsd.c @@ -271,7 +271,8 @@ get_offset_correction(struct timeval *raw, stop_adjust(); *corr = -offset_register; start_adjust(); - *err = 0.0; + if (err) + *err = 0.0; } /* ================================================== */ diff --git a/sys_solaris.c b/sys_solaris.c index 4024048..f75485a 100644 --- a/sys_solaris.c +++ b/sys_solaris.c @@ -300,7 +300,8 @@ get_offset_correction(struct timeval *raw, stop_adjust(); *corr = -offset_register; start_adjust(); - *err = 0.0; + if (err) + *err = 0.0; return; } diff --git a/sys_sunos.c b/sys_sunos.c index 4878715..6540fa6 100644 --- a/sys_sunos.c +++ b/sys_sunos.c @@ -287,7 +287,8 @@ get_offset_correction(struct timeval *raw, stop_adjust(); *corr = -offset_register; start_adjust(); - *err = 0.0; + if (err) + *err = 0.0; return; }