]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
refclock: slew last sample even after it was used
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 8 Dec 2016 12:07:50 +0000 (13:07 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 8 Dec 2016 13:47:38 +0000 (14:47 +0100)
It may be needed by locked PPS refclocks.

refclock.c

index e3287314149b11f320476cebabbf67b1045abf85..1fceea48cfa89ab0f4e0551ffacb54bc488289db 100644 (file)
@@ -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;