diff options
-rw-r--r-- | ztdynamic.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/ztdynamic.c b/ztdynamic.c index f202630..8d95b0a 100644 --- a/ztdynamic.c +++ b/ztdynamic.c @@ -105,7 +105,6 @@ static struct zt_dynamic { char addr[40]; char dname[20]; int err; - int alarm; int usecount; int dead; long rxjif; @@ -149,12 +148,13 @@ static void checkmaster(void) while(z) { if (z->timing) { z->master = 0; - newhasmaster = 1; - if (!z->alarm && (z->timing < best) && !z->dead) { + if (!(z->span.alarms & ZT_ALARM_RED) && + (z->timing < best) && !z->dead) { /* If not in alarm and they're a better timing source, use them */ master = z; best = z->timing; + newhasmaster = 1; } } z = z->next; @@ -184,7 +184,7 @@ static void ztd_sendmessage(struct zt_dynamic *z) /* Byte 1: Flags */ *buf = 0; - if (z->alarm & ZT_ALARM_RED) + if (z->span.alarms & ZT_ALARM_RED) *buf |= ZTD_FLAG_YELLOW_ALARM; *buf |= ZTD_FLAG_SIGBITS_PRESENT; buf++; msglen++; @@ -402,6 +402,7 @@ void zt_dynamic_receive(struct zt_span *span, unsigned char *msg, int msglen) if (newalarm != span->alarms) { span->alarms = newalarm; zt_alarm_notify(span); + checkmaster(); } /* Keep track of last received packet */ |