Browse Source

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
OPENBSD_3_7
henning 20 years ago
parent
commit
6d9ab8b66e
1 changed files with 8 additions and 3 deletions
  1. +8
    -3
      src/usr.sbin/ntpd/ntp.c

+ 8
- 3
src/usr.sbin/ntpd/ntp.c View File

@ -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> * 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; int a, b, nfds, i, j, idx_peers, timeout, nullfd;
u_int pfd_elms = 0, idx2peer_elms = 0; 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; pid_t pid;
struct pollfd *pfd = NULL; struct pollfd *pfd = NULL;
struct passwd *pw; struct passwd *pw;
@ -191,11 +191,13 @@ ntp_main(int pipe_prnt[2], struct ntpd_conf *nconf)
} }
idx_peers = i; idx_peers = i;
sent_cnt = 0;
TAILQ_FOREACH(p, &conf->ntp_peers, entry) { TAILQ_FOREACH(p, &conf->ntp_peers, entry) {
if (p->next > 0 && p->next < nextaction) if (p->next > 0 && p->next < nextaction)
nextaction = p->next; nextaction = p->next;
if (p->next > 0 && p->next <= time(NULL)) 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) if (p->deadline > 0 && p->deadline < nextaction)
nextaction = p->deadline; 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) if (ibuf_main->w.queued > 0)
pfd[PFD_PIPE_MAIN].events |= POLLOUT; pfd[PFD_PIPE_MAIN].events |= POLLOUT;


Loading…
Cancel
Save