diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-10-31 16:53:23 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-10-31 16:53:23 +0100 |
commit | d5c1482fbac71c51e3add52632cdf1f9f9e6661b (patch) | |
tree | d03c559bb5cde43f1101c0a66b3b69fdc3843585 /networking | |
parent | f1fdda45423a0133094840c0367aef1b026635d5 (diff) | |
download | busybox-d5c1482fbac71c51e3add52632cdf1f9f9e6661b.tar.gz |
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 <vda.linux@googlemail.com>
Diffstat (limited to 'networking')
-rw-r--r-- | networking/ntpd.c | 9 |
1 files 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) { |