From: Miroslav Lichvar Date: Thu, 8 Dec 2016 12:07:50 +0000 (+0100) Subject: refclock: slew last sample even after it was used X-Git-Tag: 3.0-pre1~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c11044ee20000d604aab43dbb58589dc0b3535d;p=thirdparty%2Fchrony.git refclock: slew last sample even after it was used It may be needed by locked PPS refclocks. --- diff --git a/refclock.c b/refclock.c index e3287314..1fceea48 100644 --- a/refclock.c +++ b/refclock.c @@ -939,11 +939,22 @@ filter_get_sample(struct MedianFilter *filter, struct timespec *sample_time, dou static void filter_slew_samples(struct MedianFilter *filter, struct timespec *when, double dfreq, double doffset) { - int i; + int i, first, last; double delta_time; struct timespec *sample; - for (i = 0; i < filter->used; i++) { + if (filter->last < 0) + return; + + /* always slew the last sample as it may be needed by PPS refclocks */ + if (filter->used > 0) { + first = 0; + last = filter->used - 1; + } else { + first = last = filter->last; + } + + for (i = first; i <= last; i++) { sample = &filter->samples[i].sample_time; UTI_AdjustTimespec(sample, when, sample, &delta_time, dfreq, doffset); filter->samples[i].offset -= delta_time;