From d5c1482fbac71c51e3add52632cdf1f9f9e6661b Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 31 Oct 2017 16:53:23 +0100 Subject: [PATCH] ntpd: skip over setting next DNS resolution attempt if it is not needed function old new delta ntpd_main 1177 1197 +20 resolve_peer_hostname 127 129 +2 Signed-off-by: Denys Vlasenko --- networking/ntpd.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/networking/ntpd.c b/networking/ntpd.c index add282b1d..0b60d003b 100644 --- a/networking/ntpd.c +++ b/networking/ntpd.c @@ -805,6 +805,7 @@ resolve_peer_hostname(peer_t *p) VERB1 if (strcmp(p->p_hostname, p->p_dotted) != 0) bb_error_msg("'%s' is %s", p->p_hostname, p->p_dotted); p->dns_errors = 0; + return lsa; } p->dns_errors = ((p->dns_errors << 1) | 1) & DNS_ERRORS_CAP; return lsa; @@ -2441,6 +2442,7 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) gettime1900d(); /* sets G.cur_time */ if (nfds <= 0) { double ct; + int dns_error; if (bb_got_signal) break; /* poll was interrupted by a signal */ @@ -2456,16 +2458,19 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv) * this way, we almost never overlap DNS resolution with * "request-reply" packet round trip. */ + dns_error = 0; ct = G.cur_time; for (item = G.ntp_peers; item != NULL; item = item->link) { peer_t *p = (peer_t *) item->data; if (p->next_action_time <= ct && !p->p_lsa) { /* This can take up to ~10 sec per each DNS query */ - resolve_peer_hostname(p); + dns_error |= (!resolve_peer_hostname(p)); } } - gettime1900d(); /* sets G.cur_time (needed for set_next()) */ + if (!dns_error) + goto check_unsync; /* Set next time for those which are still not resolved */ + gettime1900d(); /* sets G.cur_time (needed for set_next()) */ for (item = G.ntp_peers; item != NULL; item = item->link) { peer_t *p = (peer_t *) item->data; if (p->next_action_time <= ct && !p->p_lsa) { -- 2.25.1