diff --git a/networking/ntpd.c b/networking/ntpd.c index 5cad738c6..cabfb795a 100644 --- a/networking/ntpd.c +++ b/networking/ntpd.c @@ -1484,7 +1484,20 @@ recv_and_process_peer_pkt(peer_t *p) if (G.polladj_count < -POLLADJ_LIMIT) { G.polladj_count = 0; if (G.poll_exp > MINPOLL) { + llist_t *item; + G.poll_exp--; + /* Correct p->next_action_time in each peer + * which waits for sending, so that they send earlier. + * Old pp->next_action_time are on the order + * of t + (1 << old_poll_exp) + small_random, + * we simply need to subtract ~half of that. + */ + for (item = G.ntp_peers; item != NULL; item = item->link) { + peer_t *pp = (peer_t *) item->data; + if (pp->p_fd < 0) + pp->next_action_time -= (1 << G.poll_exp); + } VERB3 bb_error_msg("polladj: discipline_jitter:%f --poll_exp=%d", G.discipline_jitter, G.poll_exp); }