[git commit] ntpd: skip over setting next DNS resolution attempt if it is not needed

Denys Vlasenko vda.linux at googlemail.com
Tue Oct 31 15:53:23 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=d5c1482fbac71c51e3add52632cdf1f9f9e6661b
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
ntpd_main                                           1177    1197     +20
resolve_peer_hostname                                127     129      +2

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/ntpd.c | 9 +++++++--
 1 file 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) {


More information about the busybox-cvs mailing list