]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
sources: ignore reselect distance when combining with refclock
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 20 Apr 2015 10:59:12 +0000 (12:59 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Mon, 20 Apr 2015 10:59:12 +0000 (12:59 +0200)
sources.c

index 007190a6ccfb9947b1b4248efa433522cf6fea05..8817649f0e453a92b6be418247fb6c06daa779fc 100644 (file)
--- a/sources.c
+++ b/sources.c
@@ -513,7 +513,7 @@ combine_sources(int n_sel_sources, struct timeval *ref_time, double *offset,
 {
   struct timeval src_ref_time;
   double src_offset, src_offset_sd, src_frequency, src_skew;
-  double src_root_delay, src_root_dispersion, elapsed;
+  double src_root_delay, src_root_dispersion, sel_src_distance, elapsed;
   double offset_weight, sum_offset_weight, sum_offset, sum2_offset_sd;
   double frequency_weight, sum_frequency_weight, sum_frequency, inv_sum2_skew;
   int i, index, combined;
@@ -524,6 +524,10 @@ combine_sources(int n_sel_sources, struct timeval *ref_time, double *offset,
   sum_offset_weight = sum_offset = sum2_offset_sd = 0.0;
   sum_frequency_weight = sum_frequency = inv_sum2_skew = 0.0;
 
+  sel_src_distance = sources[selected_source_index]->sel_info.root_distance;
+  if (sources[selected_source_index]->type == SRC_NTP)
+    sel_src_distance += reselect_distance;
+
   for (i = combined = 0; i < n_sel_sources; i++) {
     index = sel_sources[i];
     SST_GetTrackingData(sources[index]->stats, &src_ref_time,
@@ -536,8 +540,7 @@ combine_sources(int n_sel_sources, struct timeval *ref_time, double *offset,
        are not close, or it was recently marked as distant */
 
     if (index != selected_source_index &&
-        (sources[index]->sel_info.root_distance > combine_limit *
-           (reselect_distance + sources[selected_source_index]->sel_info.root_distance) ||
+        (sources[index]->sel_info.root_distance > combine_limit * sel_src_distance ||
          fabs(*frequency - src_frequency) >
            combine_limit * (*skew + src_skew + LCL_GetMaxClockError()))) {
       /* Use a smaller penalty in first few updates */