From 379a68b93c8e4e4440de15392b1d58383ccfa24e Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Sun, 2 May 2021 18:39:18 +0200 Subject: [PATCH] Fix simmTest failures on targets with imprecise timing --- modules/database/test/std/rec/simmTest.c | 26 +++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/modules/database/test/std/rec/simmTest.c b/modules/database/test/std/rec/simmTest.c index 17e4d7fe4..1f4193378 100644 --- a/modules/database/test/std/rec/simmTest.c +++ b/modules/database/test/std/rec/simmTest.c @@ -12,9 +12,11 @@ #include #include #include +#include #include #include #include +#include #include "recSup.h" #include "aiRecord.h" @@ -414,6 +416,15 @@ void testSiolWrite(const char *name, * Asynchronous processing using simm:DELAY */ +static void +ping(CALLBACK *pcb) +{ + epicsEventId ev; + callbackGetUser(ev, pcb); + + epicsEventMustTrigger(ev); +} + static void testSimmDelay(const char *name, epicsFloat64 *psdly, @@ -422,6 +433,14 @@ void testSimmDelay(const char *name, epicsTimeStamp now; const double delay = 0.01; /* 10 ms */ double diff; + epicsEventId poked; + CALLBACK cb; + + memset(&cb, 0, sizeof(CALLBACK)); + poked = epicsEventMustCreate(epicsEventEmpty); + callbackSetCallback(ping, &cb); + callbackSetPriority(priorityLow, &cb); + callbackSetUser(poked, &cb); testDiag("## Asynchronous processing with simm:DELAY ##"); @@ -443,14 +462,11 @@ void testSimmDelay(const char *name, testdbPutFieldOk(namePROC, DBR_LONG, 0); testdbGetFieldEqual(namePACT, DBR_USHORT, 1); epicsTimeGetCurrent(&now); - epicsThreadSleep(1.75*delay); - if(testImpreciseTiming()) - testTodoBegin("imprecise"); + callbackRequestDelayed(&cb, 1.5 * delay); + epicsEventWait(poked); testdbGetFieldEqual(namePACT, DBR_USHORT, 0); diff = epicsTimeDiffInSeconds(mytime, &now); testOk(diff >= 0.0, "time stamp is recent (%.9f sec)", diff); - if(testImpreciseTiming()) - testTodoEnd(); /* Reset delay */ *psdly = -1.;