From 6d9ab8b66e85d00dc8f9c3e4846ad836b6d155d4 Mon Sep 17 00:00:00 2001 From: henning <> Date: Tue, 22 Feb 2005 12:03:24 +0000 Subject: [PATCH] when sending a query already returns a failure, we're not going to see a reply to that query. if we get errors for all queries and the initial settime() is still due and thus the parent process still waits (not yet daemonized!), send an IMSG_SETTIME with offset 0. shortens the delay dramatically when you boot without network idea from a discussion with theo --- src/usr.sbin/ntpd/ntp.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/usr.sbin/ntpd/ntp.c b/src/usr.sbin/ntpd/ntp.c index d25d370b..9c743ef3 100644 --- a/src/usr.sbin/ntpd/ntp.c +++ b/src/usr.sbin/ntpd/ntp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ntp.c,v 1.50 2005/02/02 19:03:52 henning Exp $ */ +/* $OpenBSD: ntp.c,v 1.51 2005/02/22 12:03:24 henning Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -64,7 +64,7 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf) { int a, b, nfds, i, j, idx_peers, timeout, nullfd; u_int pfd_elms = 0, idx2peer_elms = 0; - u_int listener_cnt, new_cnt; + u_int listener_cnt, new_cnt, sent_cnt; pid_t pid; struct pollfd *pfd = NULL; struct passwd *pw; @@ -191,11 +191,13 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf) } idx_peers = i; + sent_cnt = 0; TAILQ_FOREACH(p, &conf->ntp_peers, entry) { if (p->next > 0 && p->next < nextaction) nextaction = p->next; if (p->next > 0 && p->next <= time(NULL)) - client_query(p); + if (client_query(p) == 0) + sent_cnt++; if (p->deadline > 0 && p->deadline < nextaction) nextaction = p->deadline; @@ -221,6 +223,9 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf) } } + if (sent_cnt == 0 && conf->settime) + priv_settime(0); /* no good peers, don't wait */ + if (ibuf_main->w.queued > 0) pfd[PFD_PIPE_MAIN].events |= POLLOUT;