]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
refclock: don't compare sample time with samples from previous poll
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 21 Nov 2016 10:20:57 +0000 (11:20 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 21 Nov 2016 11:03:27 +0000 (12:03 +0100)
This is an improvement of commit 0a848e2528aaef0b3347de0b49ce50da8dc1c9a4.

refclock.c

index 85e189942d03401998a358abc9df7857af8e6228..862a624364b64047aecf822b3e599803b393c8ef 100644 (file)
@@ -106,6 +106,7 @@ static void filter_reset(struct MedianFilter *filter);
 static double filter_get_avg_sample_dispersion(struct MedianFilter *filter);
 static void filter_add_sample(struct MedianFilter *filter, struct timeval *sample_time, double offset, double dispersion);
 static int filter_get_last_sample(struct MedianFilter *filter, struct timeval *sample_time, double *offset, double *dispersion);
+static int filter_get_samples(struct MedianFilter *filter);
 static int filter_select_samples(struct MedianFilter *filter);
 static int filter_get_sample(struct MedianFilter *filter, struct timeval *sample_time, double *offset, double *dispersion);
 static void filter_slew_samples(struct MedianFilter *filter, struct timeval *when, double dfreq, double doffset);
@@ -512,7 +513,8 @@ valid_sample_time(RCL_Instance instance, struct timeval *raw, struct timeval *co
   UTI_DiffTimevalsToDouble(&diff, &raw_time, raw);
 
   if (diff < 0.0 || diff > UTI_Log2ToDouble(instance->poll + 1) ||
-      (filter_get_last_sample(&instance->filter, &last_sample_time,
+      (filter_get_samples(&instance->filter) > 0 &&
+       filter_get_last_sample(&instance->filter, &last_sample_time,
                               &last_offset, &last_dispersion) &&
        UTI_CompareTimevals(&last_sample_time, cooked) >= 0)) {
     DEBUG_LOG(LOGF_Refclock, "%s refclock sample not valid age=%.6f raw=%s cooked=%s",
@@ -725,6 +727,12 @@ filter_get_last_sample(struct MedianFilter *filter, struct timeval *sample_time,
   return 1;
 }
 
+static int
+filter_get_samples(struct MedianFilter *filter)
+{
+  return filter->used;
+}
+
 static const struct FilterSample *tmp_sorted_array;
 
 static int