[git commit] ntpd: decrease ntpd -q "no response" timeout to 10 sec

Denys Vlasenko vda.linux at googlemail.com
Wed Apr 6 23:45:20 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=8e23fafadee75bbe275bb795d0b2c2121dad93e7
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/ntpd.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/networking/ntpd.c b/networking/ntpd.c
index 3ed05ba..ba2950d 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -238,6 +238,8 @@ enum {
 	OPT_p = (1 << 5),
 	OPT_S = (1 << 6),
 	OPT_l = (1 << 7) * ENABLE_FEATURE_NTPD_SERVER,
+	/* We hijack some bits for other purposes */
+	OPT_qq = (1 << 8),
 };
 
 struct globals {
@@ -1930,15 +1932,18 @@ static NOINLINE void ntp_init(char **argv)
 		setpriority(PRIO_PROCESS, 0, -15);
 
 	/* If network is up, syncronization occurs in ~10 seconds.
-	 * We give "ntpd -q" a full minute to finish, then we exit.
+	 * We give "ntpd -q" 10 seconds to get first reply,
+	 * then another 50 seconds to finish syncing.
 	 *
 	 * I tested ntpd 4.2.6p1 and apparently it never exits
 	 * (will try forever), but it does not feel right.
 	 * The goal of -q is to act like ntpdate: set time
 	 * after a reasonably small period of polling, or fail.
 	 */
-	if (opts & OPT_q)
-		alarm(60);
+	if (opts & OPT_q) {
+		option_mask32 |= OPT_qq;
+		alarm(10);
+	}
 
 	bb_signals(0
 		| (1 << SIGTERM)
@@ -2065,6 +2070,15 @@ int ntpd_main(int argc UNUSED_PARAM, char **argv)
 #endif
 		for (; nfds != 0 && j < i; j++) {
 			if (pfd[j].revents /* & (POLLIN|POLLERR)*/) {
+				/*
+				 * At init, alarm was set to 10 sec.
+				 * Now we did get a reply.
+				 * Increase timeout to 50 seconds to finish syncing.
+				 */
+				if (option_mask32 & OPT_qq) {
+					option_mask32 &= ~OPT_qq;
+					alarm(50);
+				}
 				nfds--;
 				recv_and_process_peer_pkt(idx2peer[j]);
 				gettime1900d(); /* sets G.cur_time */
-- 
1.7.3.4



More information about the busybox-cvs mailing list