diff --git a/src/ioc/db/dbScan.c b/src/ioc/db/dbScan.c index 28c3dda5e..e9dc178a2 100644 --- a/src/ioc/db/dbScan.c +++ b/src/ioc/db/dbScan.c @@ -27,7 +27,6 @@ #include "epicsEvent.h" #include "epicsExit.h" #include "epicsInterrupt.h" -#include "epicsMath.h" #include "epicsMutex.h" #include "epicsPrint.h" #include "epicsRingPointer.h" @@ -484,8 +483,6 @@ event_list *eventNameToHandle(const char *eventname) */ if (epicsParseDouble(eventname, &eventnumber, NULL) == 0) { - if (!finite(eventnumber)) - return NULL; /* Inf and NaN are no events */ if (eventnumber >= 0 && eventnumber < 256) { if (eventnumber < 1) @@ -493,7 +490,7 @@ event_list *eventNameToHandle(const char *eventname) if ((pel = pevent_list[(int)eventnumber]) != NULL) return pel; } - else + else eventnumber = 0; /* not a numeric event between 1 and 255 */ } diff --git a/src/std/rec/test/scanEventTest.c b/src/std/rec/test/scanEventTest.c index 9835b7bf8..595264a8f 100644 --- a/src/std/rec/test/scanEventTest.c +++ b/src/std/rec/test/scanEventTest.c @@ -14,6 +14,7 @@ #include "dbUnitTest.h" #include "testMain.h" #include "osiFileName.h" +#include "epicsThread.h" #include "dbScan.h" void scanEventTest_registerRecordDeviceDriver(struct dbBase *); @@ -24,23 +25,22 @@ void scanEventTest_registerRecordDeviceDriver(struct dbBase *); num < 0 is string event (use same unique number for aliases) */ const struct {char* name; int num;} events[] = { +/* No events */ + {NULL, 0}, {"", 0}, {" ", 0}, {"0", 0}, {"0.000000", 0}, {"-0.00000", 0}, {"0.9", 0}, - {"nan", 0}, - {"NaN", 0}, - {"-NAN", 0}, - {"-inf", 0}, - {"inf", 0}, +/* Numeric events */ {"2", 2}, {"2.000000", 2}, {"2.5", 2}, {" 2.5 ", 2}, {"+0x02", 2}, {"3", 3}, +/* Named events */ {"info 1", -1}, {" info 1 ", -1}, {"-0.9", -2}, @@ -48,6 +48,11 @@ const struct {char* name; int num;} events[] = { {"-2.000000", -4}, {"-2.5", -5}, {" -2.5 ", -5}, + {"nan", -6}, + {"NaN", -7}, + {"-NAN", -8}, + {"-inf", -9}, + {"inf", -10}, }; MAIN(scanEventTest) @@ -117,14 +122,14 @@ MAIN(scanEventTest) testdbGetFieldEqual("e2", DBR_LONG, e); testdbPutFieldOk("e3", DBR_LONG, e); testdbPutFieldOk("e3.PROC", DBR_LONG, 1); - if (e != 0) - for (i = 0; i < NELEMENTS(events); i++) - if (events[i].num == e) { - expected_count[INDX(i)]+=3; /* +1 for eventnum->e1, +1 for e2<-eventnum, +1 for e3 */ - break; - } + for (i = 0; i < NELEMENTS(events); i++) + if (e > 0 && e < 256 && events[i].num == e) { /* numeric events */ + expected_count[INDX(i)]+=3; /* +1 for eventnum->e1, +1 for e2<-eventnum, +1 for e3 */ + break; + } } - + /* Allow records to finish processing */ + epicsThreadSleep(0.1); testDiag("Check if events have been processed the expected number of times"); for (i = 0; i < NELEMENTS(events); i++) { char pvname[100];