From 9c1b8ba9521e2aee0b3e78af00b0f56424433bbe Mon Sep 17 00:00:00 2001 From: Andrew Johnson <anj@aps.anl.gov> Date: Sat, 6 Oct 2012 21:48:01 -0500 Subject: [PATCH] rec: Fix problem with NAN in MLST/ALST fields If MLST or ALST became NAN the associated monitor would never trigger. Now a NAN will cause it to always trigger. --- documentation/RELEASE_NOTES.html | 6 ++++++ src/rec/aiRecord.c | 4 ++-- src/rec/aoRecord.c | 4 ++-- src/rec/calcRecord.c | 4 ++-- src/rec/calcoutRecord.c | 17 +++++++++-------- src/rec/dfanoutRecord.c | 4 ++-- src/rec/selRecord.c | 4 ++-- src/rec/subRecord.c | 4 ++-- 8 files changed, 27 insertions(+), 20 deletions(-) diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index 47babb91bd..7d1e8b8422 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -13,6 +13,12 @@ <!-- Insert new items immediately below here ... --> +<h4>Problem with NAN values in MLST/ALST fields</h4> + +<p>The ai, ao, calc, calcout, dfanout, sel and sub record types could stop +posting monitors if they got NAN values in their MLST or ALST fields. A change +has been included so this should no longer be the case.</p> + <h4>MacOS build defaults changed</h4> <p>The default build settings for darwin-x86 targets have been changed to match diff --git a/src/rec/aiRecord.c b/src/rec/aiRecord.c index 343d62126e..e6977005fb 100644 --- a/src/rec/aiRecord.c +++ b/src/rec/aiRecord.c @@ -385,7 +385,7 @@ static void monitor(aiRecord *prec) /* check for value change */ delta = prec->mlst - prec->val; if(delta<0.0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -395,7 +395,7 @@ static void monitor(aiRecord *prec) /* check for archive change */ delta = prec->alst - prec->val; if(delta<0.0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ diff --git a/src/rec/aoRecord.c b/src/rec/aoRecord.c index 5f8436ab24..bce43e3e4f 100644 --- a/src/rec/aoRecord.c +++ b/src/rec/aoRecord.c @@ -484,7 +484,7 @@ static void monitor(aoRecord *prec) /* check for value change */ delta = prec->mlst - prec->val; if(delta<0.0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -493,7 +493,7 @@ static void monitor(aoRecord *prec) /* check for archive change */ delta = prec->alst - prec->val; if(delta<0.0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ diff --git a/src/rec/calcRecord.c b/src/rec/calcRecord.c index 722ce06982..8accf60d9d 100644 --- a/src/rec/calcRecord.c +++ b/src/rec/calcRecord.c @@ -310,7 +310,7 @@ static void monitor(calcRecord *prec) /* check for value change */ delta = prec->mlst - prec->val; if (delta < 0.0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -319,7 +319,7 @@ static void monitor(calcRecord *prec) /* check for archive change */ delta = prec->alst - prec->val; if (delta < 0.0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ diff --git a/src/rec/calcoutRecord.c b/src/rec/calcoutRecord.c index 0b7c78323a..89265f3cc3 100644 --- a/src/rec/calcoutRecord.c +++ b/src/rec/calcoutRecord.c @@ -209,7 +209,7 @@ static long init_record(calcoutRecord *prec, int pass) static long process(calcoutRecord *prec) { rpvtStruct *prpvt = prec->rpvt; - int doOutput = 0; + int doOutput; if (!prec->pact) { prec->pact = TRUE; @@ -231,21 +231,22 @@ static long process(calcoutRecord *prec) doOutput = 1; break; case calcoutOOPT_On_Change: - if (fabs(prec->pval - prec->val) > prec->mdel) doOutput = 1; + doOutput = ! (fabs(prec->pval - prec->val) <= prec->mdel); break; case calcoutOOPT_Transition_To_Zero: - if ((prec->pval != 0.0) && (prec->val == 0.0)) doOutput = 1; + doOutput = ((prec->pval != 0.0) && (prec->val == 0.0)); break; case calcoutOOPT_Transition_To_Non_zero: - if ((prec->pval == 0.0) && (prec->val != 0.0)) doOutput = 1; + doOutput = ((prec->pval == 0.0) && (prec->val != 0.0)); break; case calcoutOOPT_When_Zero: - if (prec->val == 0.0) doOutput = 1; + doOutput = (prec->val == 0.0); break; case calcoutOOPT_When_Non_zero: - if (prec->val != 0.0) doOutput = 1; + doOutput = (prec->val != 0.0); break; default: + doOutput = 0; break; } prec->pval = prec->val; @@ -584,7 +585,7 @@ static void monitor(calcoutRecord *prec) /* check for value change */ delta = prec->mlst - prec->val; if (delta<0.0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -593,7 +594,7 @@ static void monitor(calcoutRecord *prec) /* check for archive change */ delta = prec->alst - prec->val; if (delta<0.0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ diff --git a/src/rec/dfanoutRecord.c b/src/rec/dfanoutRecord.c index 672c1cccd4..723d1a59c4 100644 --- a/src/rec/dfanoutRecord.c +++ b/src/rec/dfanoutRecord.c @@ -267,7 +267,7 @@ static void monitor(dfanoutRecord *prec) /* check for value change */ delta = prec->mlst - prec->val; if(delta<0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -276,7 +276,7 @@ static void monitor(dfanoutRecord *prec) /* check for archive change */ delta = prec->alst - prec->val; if(delta<0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ diff --git a/src/rec/selRecord.c b/src/rec/selRecord.c index 6bc43c227b..6174dab3d0 100644 --- a/src/rec/selRecord.c +++ b/src/rec/selRecord.c @@ -300,7 +300,7 @@ static void monitor(selRecord *prec) /* check for value change */ delta = prec->mlst - prec->val; if(delta<0.0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -309,7 +309,7 @@ static void monitor(selRecord *prec) /* check for archive change */ delta = prec->alst - prec->val; if(delta<0.0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ diff --git a/src/rec/subRecord.c b/src/rec/subRecord.c index c07de56929..b16a89c3c0 100644 --- a/src/rec/subRecord.c +++ b/src/rec/subRecord.c @@ -353,7 +353,7 @@ static void monitor(subRecord *prec) /* check for value change */ delta = prec->val - prec->mlst; if (delta < 0.0) delta = -delta; - if (delta > prec->mdel) { + if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */ /* post events for value change */ monitor_mask |= DBE_VALUE; /* update last value monitored */ @@ -362,7 +362,7 @@ static void monitor(subRecord *prec) /* check for archive change */ delta = prec->val - prec->alst; if (delta < 0.0) delta = -delta; - if (delta > prec->adel) { + if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */ /* post events on value field for archive change */ monitor_mask |= DBE_LOG; /* update last archive value monitored */ -- GitLab