ntpd: speed up reaction to poll interval decrease
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 2 Jan 2010 00:50:16 +0000 (01:50 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 2 Jan 2010 00:50:16 +0000 (01:50 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ntpd.c

index 5cad738c6af0e0a176a2b9d5e4c988e59ceab7aa..cabfb795acb30fa90a07649bf8d5416eb423b3f5 100644 (file)
@@ -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);
                                }