summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2017-10-31 16:53:23 +0100
committerDenys Vlasenko2017-10-31 16:53:23 +0100
commitd5c1482fbac71c51e3add52632cdf1f9f9e6661b (patch)
treed03c559bb5cde43f1101c0a66b3b69fdc3843585
parentf1fdda45423a0133094840c0367aef1b026635d5 (diff)
downloadbusybox-d5c1482fbac71c51e3add52632cdf1f9f9e6661b.zip
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>
-rw-r--r--networking/ntpd.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/networking/ntpd.c b/networking/ntpd.c
index add282b..0b60d00 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) {