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;