From: Miroslav Lichvar Date: Wed, 26 Aug 2009 15:58:57 +0000 (+0200) Subject: Don't lose remaining adjtime in initiate_slew X-Git-Tag: 1.24-pre1~81 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dd4fb511a5fc2870dcddb40444adf54a54244fca;p=thirdparty%2Fchrony.git Don't lose remaining adjtime in initiate_slew initiate_slew is called also from set_frequency which doesn't read the remaining adjtime. This wasn't a problem before commit 8c0f3f4 as offset_register was 0.0 and initiate_slew immediately returned. --- diff --git a/sys_linux.c b/sys_linux.c index c60a7d3c..9a4e809b 100644 --- a/sys_linux.c +++ b/sys_linux.c @@ -264,6 +264,13 @@ initiate_slew(void) return; } + /* Cancel any standard adjtime that is running */ + offset = 0; + if (TMX_ApplyOffset(&offset) < 0) { + CROAK("adjtimex() failed in accrue_offset"); + } + offset_register -= (double) offset / 1.0e6; + if (fabs(offset_register) < MAX_ADJUST_WITH_ADJTIME) { /* Use adjtime to do the shift */ offset = our_lround(1.0e6 * -offset_register); @@ -383,19 +390,9 @@ abort_slew(void) static void accrue_offset(double offset) { - long toffset; - /* Add the new offset to the register */ offset_register += offset; - /* Cancel any standard adjtime that is running */ - toffset = 0; - if (TMX_ApplyOffset(&toffset) < 0) { - CROAK("adjtimex() failed in accrue_offset"); - } - - offset_register -= (double) toffset / 1.0e6; - if (!fast_slewing) { initiate_slew(); } /* Otherwise, when the fast slew completes, any other stuff