]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 1931] cv always includes fudgetime1, never fudgetime2.
authorDave Hart <hart@ntp.org>
Sat, 14 May 2011 03:37:31 +0000 (03:37 +0000)
committerDave Hart <hart@ntp.org>
Sat, 14 May 2011 03:37:31 +0000 (03:37 +0000)
bk: 4dcdf8fbC5h6htxbAeaWaHI9vkQBww

ChangeLog
ntpd/ntp_control.c
ntpd/ntp_refclock.c

index 99d495be21b7604dd03c9efb3e334cf5e3f4cbda..4acad70737f946574eda854ca1ecb0c0e2ceaa69 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
 * [Bug 1927] io_closeclock() should purge pending recvbufs.
+* [Bug 1931] cv always includes fudgetime1, never fudgetime2.
 * Use acts_close() in acts_shutdown() to avoid leaving a stale lockfile
   if unpeered via runtime configuration while the modem is open.
 * Correct acts_close() test of pp->io.fd to see if it is open.
index 877989de4a4333f2164099ff2ee0acb1eac7b1c2..4214dde01543bbb9929707acb7d008a09b22bd86 100644 (file)
@@ -2648,10 +2648,7 @@ ctl_putclock(
                break;
 
        case CC_FLAGS:
-               if (mustput || (pcs->haveflags &        (CLK_HAVEFLAG1 |
-                                                        CLK_HAVEFLAG2 | CLK_HAVEFLAG3 | CLK_HAVEFLAG4)))
-                       ctl_putuint(clock_var[id].text,
-                                   pcs->flags);
+               ctl_putuint(clock_var[id].text, pcs->flags);
                break;
 
        case CC_DEVICE:
@@ -3929,19 +3926,20 @@ read_clockstatus(
         */
        ctl_error(CERR_BADASSOC);
 #else
-       const struct ctl_var *v;
-       int i;
-       struct peer *peer;
-       char *valuep;
-       u_char *wants;
-       unsigned int gotvar;
-       const u_char *cc;
-       struct ctl_var *kv;
-       struct refclockstat cs;
+       const struct ctl_var *  v;
+       int                     i;
+       struct peer *           peer;
+       char *                  valuep;
+       u_char *                wants;
+       size_t                  wants_alloc;
+       int                     gotvar;
+       const u_char *          cc;
+       struct ctl_var *        kv;
+       struct refclockstat     cs;
 
-       if (res_associd)
+       if (res_associd != 0) {
                peer = findpeerbyassoc(res_associd);
-       else {
+       else {
                /*
                 * Find a clock for this jerk.  If the system peer
                 * is a clock use it, else search peer_list for one.
@@ -3951,7 +3949,7 @@ read_clockstatus(
                        peer = sys_peer;
                else
                        for (peer = peer_list;
-                            peer != NULL; 
+                            peer != NULL;
                             peer = peer->p_link)
                                if (FLAG_REFCLOCK & peer->flags)
                                        break;
@@ -3971,13 +3969,13 @@ read_clockstatus(
         * Look for variables in the packet.
         */
        rpkt.status = htons(ctlclkstatus(&cs));
-       gotvar = CC_MAXCODE + 1 + count_var(kv);
-       wants = emalloc_zero(gotvar);
-       gotvar = 0;
+       wants_alloc = CC_MAXCODE + 1 + count_var(kv);
+       wants = emalloc_zero(wants_alloc);
+       gotvar = FALSE;
        while (NULL != (v = ctl_getitem(clock_var, &valuep))) {
                if (!(EOV & v->flags)) {
-                       wants[v->code] = 1;
-                       gotvar = 1;
+                       wants[v->code] = TRUE;
+                       gotvar = TRUE;
                } else {
                        v = ctl_getitem(kv, &valuep);
                        NTP_INSIST(NULL != v);
@@ -3987,27 +3985,28 @@ read_clockstatus(
                                free_varlist(cs.kv_list);
                                return;
                        }
-                       wants[CC_MAXCODE + 1 + v->code] = 1;
-                       gotvar = 1;
+                       wants[CC_MAXCODE + 1 + v->code] = TRUE;
+                       gotvar = TRUE;
                }
        }
 
        if (gotvar) {
                for (i = 1; i <= CC_MAXCODE; i++)
                        if (wants[i])
-                               ctl_putclock(i, &cs, 1);
+                               ctl_putclock(i, &cs, TRUE);
                if (kv != NULL)
                        for (i = 0; !(EOV & kv[i].flags); i++)
                                if (wants[i + CC_MAXCODE + 1])
                                        ctl_putdata(kv[i].text,
-                                           strlen(kv[i].text), 0);
+                                                   strlen(kv[i].text),
+                                                   FALSE);
        } else {
                for (cc = def_clock_var; *cc != 0; cc++)
-                       ctl_putclock((int)*cc, &cs, 0);
+                       ctl_putclock((int)*cc, &cs, FALSE);
                for ( ; kv != NULL && !(EOV & kv->flags); kv++)
                        if (DEF & kv->flags)
                                ctl_putdata(kv->text, strlen(kv->text),
-                                           0);
+                                           FALSE);
        }
 
        free(wants);
@@ -4413,12 +4412,14 @@ report_event(
                                   ctlclkstatus(&cs));
 
                        for (i = 1; i <= CC_MAXCODE; i++)
-                               ctl_putclock(i, &cs, 0);
-                       for (kv = cs.kv_list; kv &&
-                                !(kv->flags & EOV); kv++)
-                               if (kv->flags & DEF)
+                               ctl_putclock(i, &cs, FALSE);
+                       for (kv = cs.kv_list;
+                            kv != NULL && !(EOV & kv->flags);
+                            kv++)
+                               if (DEF & kv->flags)
                                        ctl_putdata(kv->text,
-                                                   strlen(kv->text), 0);
+                                                   strlen(kv->text),
+                                                   FALSE);
                        free_varlist(cs.kv_list);
                }
 #endif /* REFCLOCK */
index 2e333a59b342bd3c2e3ffa767ed47b5611e50617..642e5d46de466380e1b9aa03c47e0dd7e074e3f4 100644 (file)
@@ -986,7 +986,7 @@ refclock_control(
        /*
         * Initialize requested data
         */
-       if (in != 0) {
+       if (in != NULL) {
                if (in->haveflags & CLK_HAVETIME1)
                        pp->fudgetime1 = in->fudgetime1;
                if (in->haveflags & CLK_HAVETIME2)
@@ -1016,14 +1016,25 @@ refclock_control(
        /*
         * Readback requested data
         */
-       if (out != 0) {
-               out->haveflags = CLK_HAVETIME1 | CLK_HAVEVAL1 |
-                       CLK_HAVEVAL2 | CLK_HAVEFLAG4;
-               out->fudgetime1 = pp->fudgetime1;
-               out->fudgetime2 = pp->fudgetime2;
+       if (out != NULL) {
                out->fudgeval1 = pp->stratum;
                out->fudgeval2 = pp->refid;
+               out->haveflags = CLK_HAVEVAL1 | CLK_HAVEVAL2;
+               out->fudgetime1 = pp->fudgetime1;
+               if (0.0 != out->fudgetime1)
+                       out->haveflags |= CLK_HAVETIME1;
+               out->fudgetime2 = pp->fudgetime2;
+               if (0.0 != out->fudgetime2)
+                       out->haveflags |= CLK_HAVETIME2;
                out->flags = (u_char) pp->sloppyclockflag;
+               if (CLK_FLAG1 & out->flags)
+                       out->haveflags |= CLK_HAVEFLAG1;
+               if (CLK_FLAG2 & out->flags)
+                       out->haveflags |= CLK_HAVEFLAG2;
+               if (CLK_FLAG3 & out->flags)
+                       out->haveflags |= CLK_HAVEFLAG3;
+               if (CLK_FLAG4 & out->flags)
+                       out->haveflags |= CLK_HAVEFLAG4;
 
                out->timereset = current_time - pp->timestarted;
                out->polls = pp->polls;