diff --git a/src/db/dbScan.c b/src/db/dbScan.c index 695891985..87250ebc2 100644 --- a/src/db/dbScan.c +++ b/src/db/dbScan.c @@ -141,14 +141,16 @@ static void scanShutdown(void *arg) { int i; - scanOnce((dbCommon *)&exitOnce); - epicsEventWait(startStopEvent); + interruptAccept = FALSE; for (i = 0; i < nPeriodic; i++) { papPeriodic[i]->scanCtl = ctlExit; epicsEventSignal(papPeriodic[i]->loopEvent); epicsEventWait(startStopEvent); } + + scanOnce((dbCommon *)&exitOnce); + epicsEventWait(startStopEvent); } long scanInit() @@ -173,7 +175,9 @@ void scanRun(void) { int i; + interruptAccept = TRUE; scanCtl = ctlRun; + for (i = 0; i < nPeriodic; i++) papPeriodic[i]->scanCtl = ctlRun; } @@ -182,9 +186,11 @@ void scanPause(void) { int i; - scanCtl = ctlPause; - for (i = 0; i < nPeriodic; i++) + for (i = nPeriodic - 1; i >= 0; --i) papPeriodic[i]->scanCtl = ctlPause; + + scanCtl = ctlPause; + interruptAccept = FALSE; } void scanAdd(struct dbCommon *precord) diff --git a/src/misc/iocInit.c b/src/misc/iocInit.c index 00a40ff04..8b3034e9d 100644 --- a/src/misc/iocInit.c +++ b/src/misc/iocInit.c @@ -157,7 +157,6 @@ int iocRun(void) /* Enable scan tasks and some driver support functions. */ scanRun(); dbCaRun(); - interruptAccept = TRUE; if (iocState == iocBuilt) initHooks(initHookAfterInterruptAccept); @@ -180,7 +179,6 @@ int iocPause(void) } rsrv_pause(); - interruptAccept = FALSE; dbCaPause(); scanPause(); iocState = iocPaused; @@ -462,9 +460,6 @@ static void exitDatabase(void *dummy) DBLINK *plink; int j; - scanPause(); - interruptAccept = FALSE; - for (pdbRecordType = (dbRecordType *)ellFirst(&pdbbase->recordTypeList); pdbRecordType; pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {