diff --git a/src/ioc/db/dbCa.c b/src/ioc/db/dbCa.c index e329b4323..c64f5713f 100644 --- a/src/ioc/db/dbCa.c +++ b/src/ioc/db/dbCa.c @@ -173,15 +173,22 @@ void dbCaCallbackProcess(void *usrPvt) dbScanUnlock(pdbCommon); } -static void dbCaShutdown(void *arg) +void dbCaShutdown(void) { - if (dbCaCtl == ctlRun) { + if (dbCaCtl == ctlRun || dbCaCtl == ctlPause) { dbCaCtl = ctlExit; epicsEventSignal(workListEvent); epicsEventMustWait(startStopEvent); + epicsEventDestroy(startStopEvent); + epicsEventDestroy(workListEvent); } } +static void dbCaExit(void *arg) +{ + dbCaShutdown(); +} + void dbCaLinkInit(void) { dbServiceIOInit(); @@ -194,19 +201,23 @@ void dbCaLinkInit(void) epicsThreadGetStackSize(epicsThreadStackBig), dbCaTask, NULL); epicsEventMustWait(startStopEvent); - epicsAtExit(dbCaShutdown, NULL); + epicsAtExit(dbCaExit, NULL); } void dbCaRun(void) { - dbCaCtl = ctlRun; - epicsEventSignal(workListEvent); + if (dbCaCtl == ctlPause) { + dbCaCtl = ctlRun; + epicsEventSignal(workListEvent); + } } void dbCaPause(void) { - dbCaCtl = ctlPause; - epicsEventSignal(workListEvent); + if (dbCaCtl == ctlRun) { + dbCaCtl = ctlPause; + epicsEventSignal(workListEvent); + } } void dbCaAddLinkCallback(struct link *plink, diff --git a/src/ioc/db/dbCa.h b/src/ioc/db/dbCa.h index bf6f2edd9..a147307bf 100644 --- a/src/ioc/db/dbCa.h +++ b/src/ioc/db/dbCa.h @@ -26,6 +26,7 @@ epicsShareFunc void dbCaCallbackProcess(void *usrPvt); epicsShareFunc void dbCaLinkInit(void); epicsShareFunc void dbCaRun(void); epicsShareFunc void dbCaPause(void); +epicsShareFunc void dbCaShutdown(void); epicsShareFunc void dbCaAddLinkCallback(struct link *plink, dbCaCallback connect, dbCaCallback monitor, void *userPvt);