diff --git a/src/ioc/db/dbAccess.c b/src/ioc/db/dbAccess.c index 4ee2d677d..0b893eeb9 100644 --- a/src/ioc/db/dbAccess.c +++ b/src/ioc/db/dbAccess.c @@ -730,9 +730,18 @@ int dbLoadDatabase(const char *file, const char *path, const char *subs) int dbLoadRecords(const char* file, const char* subs) { int status = dbReadDatabase(&pdbbase, file, 0, subs); - - if (!status && dbLoadRecordsHook) - dbLoadRecordsHook(file, subs); + switch(status) + { + case 0: + if(dbLoadRecordsHook) + dbLoadRecordsHook(file, subs); + break; + case -2: + errlogPrintf("dbLoadRecords: failed to load %s - cannot load records after running iocBuild!\n", file); + break; + default: + errlogPrintf("dbLoadRecords: failed to load %s\n", file); + } return status; } diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c index 3df3c7f3a..2be7b0d0c 100644 --- a/src/ioc/dbStatic/dbLexRoutines.c +++ b/src/ioc/dbStatic/dbLexRoutines.c @@ -35,6 +35,7 @@ #include "epicsExport.h" #include "link.h" #include "special.h" +#include "iocInit.h" @@ -215,6 +216,9 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp, char *penv; char **macPairs; + if(getIocState() != iocVirgin) + return -2; + if(*ppdbbase == 0) *ppdbbase = dbAllocBase(); pdbbase = *ppdbbase; if(path && strlen(path)>0) { diff --git a/src/ioc/misc/iocInit.c b/src/ioc/misc/iocInit.c index a45770d9e..93d8908a8 100644 --- a/src/ioc/misc/iocInit.c +++ b/src/ioc/misc/iocInit.c @@ -70,9 +70,7 @@ #include "registryRecordType.h" #include "rsrv.h" -static enum { - iocVirgin, iocBuilding, iocBuilt, iocRunning, iocPaused, iocStopped -} iocState = iocVirgin; +static enum iocStateEnum iocState = iocVirgin; static enum { buildRSRV, buildIsolated } iocBuildMode; @@ -91,6 +89,11 @@ static void exitDatabase(void *dummy); int dbThreadRealtimeLock = 1; epicsExportAddress(int, dbThreadRealtimeLock); +enum iocStateEnum getIocState(void) +{ + return iocState; +} + /* * Initialize EPICS on the IOC. */ diff --git a/src/ioc/misc/iocInit.h b/src/ioc/misc/iocInit.h index 24ae45e06..3e711d6c5 100644 --- a/src/ioc/misc/iocInit.h +++ b/src/ioc/misc/iocInit.h @@ -13,10 +13,15 @@ #include "shareLib.h" +enum iocStateEnum { + iocVirgin, iocBuilding, iocBuilt, iocRunning, iocPaused, iocStopped +}; + #ifdef __cplusplus extern "C" { #endif +epicsShareFunc enum iocStateEnum getIocState(void); epicsShareFunc int iocInit(void); epicsShareFunc int iocBuild(void); epicsShareFunc int iocBuildIsolated(void);