aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/ntpd.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/networking/ntpd.c b/networking/ntpd.c
index f3a4177da..fd2f24a89 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -678,6 +678,18 @@ reset_peer_stats(peer_t *p, double offset)
678 int i; 678 int i;
679 bool small_ofs = fabs(offset) < 16 * STEP_THRESHOLD; 679 bool small_ofs = fabs(offset) < 16 * STEP_THRESHOLD;
680 680
681 /* Used to set p->filter_datapoint[i].d_dispersion = MAXDISP
682 * and clear reachable bits, but this proved to be too agressive:
683 * after step (tested with suspinding laptop for ~30 secs),
684 * this caused all previous data to be considered invalid,
685 * making us needing to collect full ~8 datapoins per peer
686 * after step in order to start trusting them.
687 * In turn, this was making poll interval decrease even after
688 * step was done. (Poll interval decreases already before step
689 * in this scenario, because we see large offsets and end up with
690 * no good peer to select).
691 */
692
681 for (i = 0; i < NUM_DATAPOINTS; i++) { 693 for (i = 0; i < NUM_DATAPOINTS; i++) {
682 if (small_ofs) { 694 if (small_ofs) {
683 p->filter_datapoint[i].d_recv_time += offset; 695 p->filter_datapoint[i].d_recv_time += offset;
@@ -691,13 +703,13 @@ reset_peer_stats(peer_t *p, double offset)
691 } else { 703 } else {
692 p->filter_datapoint[i].d_recv_time = G.cur_time; 704 p->filter_datapoint[i].d_recv_time = G.cur_time;
693 p->filter_datapoint[i].d_offset = 0; 705 p->filter_datapoint[i].d_offset = 0;
694 p->filter_datapoint[i].d_dispersion = MAXDISP; 706 /*p->filter_datapoint[i].d_dispersion = MAXDISP;*/
695 } 707 }
696 } 708 }
697 if (small_ofs) { 709 if (small_ofs) {
698 p->lastpkt_recv_time += offset; 710 p->lastpkt_recv_time += offset;
699 } else { 711 } else {
700 p->reachable_bits = 0; 712 /*p->reachable_bits = 0;*/
701 p->lastpkt_recv_time = G.cur_time; 713 p->lastpkt_recv_time = G.cur_time;
702 } 714 }
703 filter_datapoints(p); /* recalc p->filter_xxx */ 715 filter_datapoints(p); /* recalc p->filter_xxx */