From: Miroslav Lichvar Date: Thu, 12 May 2022 09:53:15 +0000 (+0200) Subject: local: cancel remaining correction after external step X-Git-Tag: 4.3-pre1~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9cc609c4b0679f6a22d08da4ea3644ea96035d9d;p=thirdparty%2Fchrony.git local: cancel remaining correction after external step Instead of the generic clock driver silently zeroing the remaining offset after detecting an external step, cancel it properly with the slew handlers in order to correct timestamps that are not reset in handling of the unknown step (e.g. the NTP local TX). --- diff --git a/local.c b/local.c index 80fb6ba9..b32d0c6b 100644 --- a/local.c +++ b/local.c @@ -563,6 +563,8 @@ void LCL_NotifyExternalTimeStep(struct timespec *raw, struct timespec *cooked, double offset, double dispersion) { + LCL_CancelOffsetCorrection(); + /* Dispatch to all handlers */ invoke_parameter_change_handlers(raw, cooked, 0.0, offset, LCL_ChangeUnknownStep); diff --git a/sys_generic.c b/sys_generic.c index 6e29ee2a..2e79a1b4 100644 --- a/sys_generic.c +++ b/sys_generic.c @@ -109,12 +109,7 @@ static void handle_step(struct timespec *raw, struct timespec *cooked, double dfreq, double doffset, LCL_ChangeType change_type, void *anything) { - if (change_type == LCL_ChangeUnknownStep) { - /* Reset offset and slewing */ - slew_start = *raw; - offset_register = 0.0; - update_slew(); - } else if (change_type == LCL_ChangeStep) { + if (change_type == LCL_ChangeStep) { UTI_AddDoubleToTimespec(&slew_start, -doffset, &slew_start); } }