diff options
author | Henning Brauer <henning@cvs.openbsd.org> | 2005-02-22 12:03:25 +0000 |
---|---|---|
committer | Henning Brauer <henning@cvs.openbsd.org> | 2005-02-22 12:03:25 +0000 |
commit | 35b1a9eab8514d12ce41eaa04ee1765329c1a566 (patch) | |
tree | 05033a923ff9005dcc8a0c495146d202d4518d81 /usr.sbin | |
parent | 5a01bae069c9d36f6c8c579b7ab6ff2c2612c576 (diff) |
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
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/ntpd/ntp.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/usr.sbin/ntpd/ntp.c b/usr.sbin/ntpd/ntp.c index d25d370b1e4..9c743ef3bab 100644 --- a/usr.sbin/ntpd/ntp.c +++ b/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 <henning@openbsd.org> @@ -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; |