]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 3445] Symmetric peer won't sync on startup
authorJuergen Perlinger <perlinger@ntp.org>
Sat, 21 Apr 2018 09:30:19 +0000 (11:30 +0200)
committerJuergen Perlinger <perlinger@ntp.org>
Sat, 21 Apr 2018 09:30:19 +0000 (11:30 +0200)
bk: 5adb04abYrUAr9s2iXDKYvgcM0absw

ChangeLog
ntpd/ntp_proto.c

index 8651807fbccfca3bace1117be27a362e5779cc07..86db7dbc73a973746c9f418fa7b975f0d50f27d6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -29,6 +29,8 @@
   - According to Brooks Davis, there was only one location <perlinger@ntp.org>
 * [Bug 3449] ntpq - display "loop" instead of refid [...] <perlinger@ntp.org>
   - applied patch by Gerry Garvey
+* [Bug 3445] Symmetric peer won't sync on startup <perlinger@ntp.org>
+  - applied patch by Gerry Garvey
 * [Bug 3434] ntpd clears STA_UNSYNC on start <perlinger@ntp.org>
   - applied patch by Miroslav Lichvar
 * [Bug 3121] Drop root privileges for the forked DNS worker <perlinger@ntp.org>
index 4ef9b56e4aeaee3e229508b2070ae9764f6dad48..91c9a3575b3e307d19b527346799b554e1a00e5b 100644 (file)
@@ -371,6 +371,13 @@ transmit(
         */
        hpoll = peer->hpoll;
 
+       /*
+        * If we haven't received anything (even if unsync) since last
+        * send, reset ppoll.
+        */
+       if (peer->outdate > peer->timelastrec && !peer->reach)
+               peer->ppoll = peer->maxpoll;
+       
        /*
         * In broadcast mode the poll interval is never changed from
         * minpoll.
@@ -2431,6 +2438,7 @@ process_packet(
                peer->seldisptoolarge++;
                DPRINTF(1, ("packet: flash header %04x\n",
                            peer->flash));
+               poll_update(peer, peer->hpoll); /* ppoll updated? */
                return;
        }
 
@@ -2977,8 +2985,6 @@ poll_update(
        } else {
                if (peer->retry > 0)
                        hpoll = peer->minpoll;
-               else if (!(peer->reach))
-                       hpoll = peer->hpoll;
                else
                        hpoll = min(peer->ppoll, peer->hpoll);
 #ifdef REFCLOCK