]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
ntp: fix RX error added to dispersion in interleaved mode
authorMiroslav Lichvar <mlichvar@redhat.com>
Wed, 7 Dec 2016 15:31:56 +0000 (16:31 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 8 Dec 2016 13:47:33 +0000 (14:47 +0100)
ntp_core.c

index a1da2c8eaefaa5ce5016975a6b701c2eb7d08aea..3d800899f279a0166357bea895f9027e7889f379 100644 (file)
@@ -1380,6 +1380,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr,
     /* These are the timespec equivalents of the remote and local epochs */
     struct timespec remote_receive, remote_transmit, prev_remote_receive;
     struct timespec local_average, remote_average;
+    double rx_ts_err;
 
     precision = LCL_GetSysPrecisionAsQuantum() +
                 UTI_Log2ToDouble(message->precision);
@@ -1398,6 +1399,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr,
                                &local_average, &local_interval);
       server_interval = UTI_DiffTimespecsToDouble(&remote_transmit,
                                                   &prev_remote_receive);
+      rx_ts_err = inst->local_rx.err;
       sample_rx_tss = inst->local_rx.source;
     } else {
       UTI_AverageDiffTimespecs(&remote_receive, &remote_transmit,
@@ -1405,6 +1407,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr,
       UTI_AverageDiffTimespecs(&inst->local_tx.ts, &rx_ts->ts,
                                &local_average, &local_interval);
       server_interval = remote_interval;
+      rx_ts_err = rx_ts->err;
       sample_rx_tss = rx_ts->source;
     }
 
@@ -1435,7 +1438,7 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr,
     skew = (source_freq_hi - source_freq_lo) / 2.0;
     
     /* and then calculate peer dispersion */
-    dispersion = precision + rx_ts->err + skew * fabs(local_interval);
+    dispersion = precision + rx_ts_err + skew * fabs(local_interval);
     
     /* Additional tests required to pass before accumulating the sample */