diff --git a/src/iocsh/asTestRegister.c b/src/iocsh/asTestRegister.c index b2cf9d656..a28833982 100644 --- a/src/iocsh/asTestRegister.c +++ b/src/iocsh/asTestRegister.c @@ -17,6 +17,8 @@ #include #include "epicsStdio.h" +#include "ellLib.h" +#include "asLib.h" #include "asDbLib.h" #include "asCa.h" #define epicsExportSharedSymbols @@ -114,6 +116,40 @@ static void ascarCallFunc(const iocshArgBuf *args) ascar(args[0].ival); } +/* asDumpUag */ +static const iocshArg asDumpUagArg0 = { "uagname",iocshArgString}; +static const iocshArg * const asDumpUagArgs[] = {&asDumpUagArg0}; +static const iocshFuncDef asDumpUagFuncDef = {"asDumpUag",1,asDumpUagArgs}; +static void asDumpUagCallFunc(const iocshArgBuf *args) +{ + asDumpUag(args[0].sval); +} + +/* asDumpHag */ +static const iocshArg asDumpHagArg0 = { "hagname",iocshArgString}; +static const iocshArg * const asDumpHagArgs[] = {&asDumpHagArg0}; +static const iocshFuncDef asDumpHagFuncDef = {"asDumpHag",1,asDumpHagArgs}; +static void asDumpHagCallFunc(const iocshArgBuf *args) +{ + asDumpHag(args[0].sval); +} + +/* asDumpRules */ +static const iocshArg asDumpRulesArg0 = { "asgname",iocshArgString}; +static const iocshArg * const asDumpRulesArgs[] = {&asDumpRulesArg0}; +static const iocshFuncDef asDumpRulesFuncDef = {"asDumpRules",1,asDumpRulesArgs}; +static void asDumpRulesCallFunc(const iocshArgBuf *args) +{ + asDumpRules(args[0].sval); +} + +/* asDumpHash */ +static const iocshFuncDef asDumpHashFuncDef = {"asDumpHash",0,0}; +static void asDumpHashCallFunc(const iocshArgBuf *args) +{ + asDumpHash(); +} + void epicsShareAPI asTestRegister(void) { iocshRegister(&asSetFilenameFuncDef,asSetFilenameCallFunc); @@ -126,4 +162,8 @@ void epicsShareAPI asTestRegister(void) iocshRegister(&aspmemFuncDef,aspmemCallFunc); iocshRegister(&astacFuncDef,astacCallFunc); iocshRegister(&ascarFuncDef,ascarCallFunc); + iocshRegister(&asDumpUagFuncDef,asDumpUagCallFunc); + iocshRegister(&asDumpHagFuncDef,asDumpHagCallFunc); + iocshRegister(&asDumpRulesFuncDef,asDumpRulesCallFunc); + iocshRegister(&asDumpHashFuncDef,asDumpHashCallFunc); } diff --git a/src/iocsh/dbTestRegister.c b/src/iocsh/dbTestRegister.c index 052fbe122..d80ca9c65 100644 --- a/src/iocsh/dbTestRegister.c +++ b/src/iocsh/dbTestRegister.c @@ -106,10 +106,8 @@ static void dbiorCallFunc(const iocshArgBuf *args) { dbior(args[0].sval,args[1].ival);} /* dbhcr */ -static const iocshArg dbhcrArg0 = { "filename",iocshArgString}; -static const iocshArg * const dbhcrArgs[1] = {&dbhcrArg0}; -static const iocshFuncDef dbhcrFuncDef = {"dbhcr",1,dbhcrArgs}; -static void dbhcrCallFunc(const iocshArgBuf *args) { dbhcr(args[0].sval);} +static const iocshFuncDef dbhcrFuncDef = {"dbhcr",0,0}; +static void dbhcrCallFunc(const iocshArgBuf *args) { dbhcr();} /* gft */ static const iocshArg gftArg0 = { "record name",iocshArgString}; diff --git a/src/iocsh/iocsh.cpp b/src/iocsh/iocsh.cpp index 3e3192eed..7cf3659cf 100644 --- a/src/iocsh/iocsh.cpp +++ b/src/iocsh/iocsh.cpp @@ -418,8 +418,8 @@ iocsh (const char *pathname) * Read commands till EOF or exit */ argc = 0; - wasOkToBlock = epicsThreadIsOkToBlock(epicsThreadGetIdSelf()); - epicsThreadSetOkToBlock(epicsThreadGetIdSelf(), 1); + wasOkToBlock = epicsThreadIsOkToBlock(); + epicsThreadSetOkToBlock(1); for (;;) { /* @@ -730,7 +730,7 @@ iocsh (const char *pathname) free (argBuf); errlogFlush(); epicsReadlineEnd(readlineContext); - epicsThreadSetOkToBlock(epicsThreadGetIdSelf(), wasOkToBlock); + epicsThreadSetOkToBlock( wasOkToBlock); return 0; } diff --git a/src/libCom/error/errlog.c b/src/libCom/error/errlog.c index c6264210d..7bf139226 100644 --- a/src/libCom/error/errlog.c +++ b/src/libCom/error/errlog.c @@ -128,7 +128,7 @@ epicsShareFunc int errlogVprintf( { int nchar; char *pbuffer; - int isOkToBlock = epicsThreadIsOkToBlock(epicsThreadGetIdSelf()); + int isOkToBlock = epicsThreadIsOkToBlock(); if(epicsInterruptIsInterruptContext()) { epicsInterruptContextMessage @@ -211,7 +211,7 @@ epicsShareFunc int errlogSevVprintf( char *pnext; int nchar; int totalChar=0; - int isOkToBlock = epicsThreadIsOkToBlock(epicsThreadGetIdSelf()); + int isOkToBlock = epicsThreadIsOkToBlock(); char *pmessage; if(pvtData.sevToLog>severity) return(0); @@ -308,7 +308,7 @@ epicsShareFunc void errPrintf(long status, const char *pFileName, char *pnext; int nchar; int totalChar=0; - int isOkToBlock = epicsThreadIsOkToBlock(epicsThreadGetIdSelf()); + int isOkToBlock = epicsThreadIsOkToBlock(); char *pmessage; if(epicsInterruptIsInterruptContext()) { diff --git a/src/libCom/osi/epicsThread.cpp b/src/libCom/osi/epicsThread.cpp index b352a2028..b6d48bd72 100644 --- a/src/libCom/osi/epicsThread.cpp +++ b/src/libCom/osi/epicsThread.cpp @@ -240,13 +240,13 @@ const char *epicsThread::getNameSelf () return epicsThreadGetNameSelf (); } -bool epicsThread::isOkToBlock () const +bool epicsThread::isOkToBlock () { - return static_cast(epicsThreadIsOkToBlock(this->id)); + return static_cast(epicsThreadIsOkToBlock()); } void epicsThread::setOkToBlock(bool isOkToBlock) { - epicsThreadSetOkToBlock(this->id,static_cast(isOkToBlock)); + epicsThreadSetOkToBlock(static_cast(isOkToBlock)); } diff --git a/src/libCom/osi/epicsThread.h b/src/libCom/osi/epicsThread.h index 8141653c6..e7756a591 100644 --- a/src/libCom/osi/epicsThread.h +++ b/src/libCom/osi/epicsThread.h @@ -97,9 +97,8 @@ epicsShareFunc const char * epicsShareAPI epicsThreadGetNameSelf(void); epicsShareFunc void epicsShareAPI epicsThreadGetName( epicsThreadId id, char *name, size_t size); -epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock(epicsThreadId id); -epicsShareFunc void epicsShareAPI epicsThreadSetOkToBlock( - epicsThreadId id,int isOkToBlock); +epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock(void); +epicsShareFunc void epicsShareAPI epicsThreadSetOkToBlock(int isOkToBlock); epicsShareFunc void epicsShareAPI epicsThreadShowAll(unsigned int level); epicsShareFunc void epicsShareAPI epicsThreadShow( @@ -155,8 +154,8 @@ public: static void sleep (double seconds); /* static epicsThread & getSelf (); */ static const char * getNameSelf (); - bool isOkToBlock () const; - void setOkToBlock(bool isOkToBlock) ; + static bool isOkToBlock () ; + static void setOkToBlock(bool isOkToBlock) ; class mustBeCalledByManagedThread {}; /* exception */ private: epicsThreadRunable & runable; diff --git a/src/libCom/osi/os/RTEMS/osdThread.c b/src/libCom/osi/os/RTEMS/osdThread.c index 9c153d503..a2a31a698 100644 --- a/src/libCom/osi/os/RTEMS/osdThread.c +++ b/src/libCom/osi/os/RTEMS/osdThread.c @@ -454,9 +454,9 @@ epicsThreadId epicsThreadGetId (const char *name) return (epicsThreadId)tid; } -int epicsThreadIsOkToBlock (epicsThreadId id) +int epicsThreadIsOkToBlock (void) { - rtems_id tid = (rtems_id)id; + rtems_id tid = (rtems_id)epicsThreadGetIdSelf(); rtems_status_code sc; rtems_unsigned32 note; struct taskVar *v; @@ -475,9 +475,9 @@ int epicsThreadIsOkToBlock (epicsThreadId id) return okToBlock; } -void epicsThreadSetOkToBlock (epicsThreadId id,int isOkToBlock) +void epicsThreadSetOkToBlock (int isOkToBlock) { - rtems_id tid = (rtems_id)id; + rtems_id tid = (rtems_id)epicsThreadGetIdSelf(); rtems_status_code sc; rtems_unsigned32 note; struct taskVar *v; diff --git a/src/libCom/osi/os/WIN32/osdThread.c b/src/libCom/osi/os/WIN32/osdThread.c index 60ecc32f2..711fa45d6 100644 --- a/src/libCom/osi/os/WIN32/osdThread.c +++ b/src/libCom/osi/os/WIN32/osdThread.c @@ -848,8 +848,9 @@ epicsShareFunc void epicsShareAPI epicsThreadGetName ( /* * epicsThreadIsOkToBlock () */ -epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock ( epicsThreadId id ) +epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock (void); { + epicsThreadId id = epicsThreadGetIdSelf(); win32ThreadParam *pParm = ( win32ThreadParam * ) id; return pParm->isOkToBlock; @@ -858,9 +859,9 @@ epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock ( epicsThreadId id ) /* * epicsThreadSetOkToBlock () */ -epicsShareFunc int epicsShareAPI epicsThreadSetOkToBlock ( - epicsThreadId id, int isOkToBlock) +epicsShareFunc int epicsShareAPI epicsThreadSetOkToBlock ( int isOkToBlock) { + epicsThreadId id = epicsThreadGetIdSelf(); win32ThreadParam *pParm = ( win32ThreadParam * ) id; pParm->isOkToBlock = isOkToBlock; diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index 5b07542ee..93cbb31f7 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -583,15 +583,14 @@ const char *epicsThreadGetNameSelf() return(pthreadInfo->name); } -int epicsThreadIsOkToBlock(epicsThreadId pthreadInfo) { - assert(epicsThreadOnceCalled); - assert(pthreadInfo); +int epicsThreadIsOkToBlock(void) +{ + epicsThreadId pthreadInfo = epicsThreadGetIdSelf(); return pthreadInfo->isOkToBlock; } -void epicsThreadSetOkToBlock(epicsThreadId pthreadInfo,int isOkToBlock) { - assert(epicsThreadOnceCalled); - assert(pthreadInfo); +void epicsThreadSetOkToBlock(int isOkToBlock) { + epicsThreadId pthreadInfo = epicsThreadGetIdSelf(); pthreadInfo->isOkToBlock = isOkToBlock; } diff --git a/src/libCom/osi/os/vxWorks/osdThread.c b/src/libCom/osi/os/vxWorks/osdThread.c index 542bab9d7..3b11d4d69 100644 --- a/src/libCom/osi/os/vxWorks/osdThread.c +++ b/src/libCom/osi/os/vxWorks/osdThread.c @@ -276,14 +276,14 @@ void epicsThreadGetName (epicsThreadId id, char *name, size_t size) name[size-1] = '\0'; } -int epicsThreadIsOkToBlock(epicsThreadId id) +int epicsThreadIsOkToBlock(void) { - return isOkToBlock; + return taskVarGet(taskIdSelf(),&isOkToBlock); } -void epicsThreadSetOkToBlock(epicsThreadId id,int yesNo) +void epicsThreadSetOkToBlock(int yesNo) { - isOkToBlock = yesNo; + taskVarSet(taskIdSelf(),&isOkToBlock,yesNo); } void epicsThreadShowAll(unsigned int level) diff --git a/src/libCom/test/epicsOkToBlockTest.cpp b/src/libCom/test/epicsOkToBlockTest.cpp index d5df05ca4..03e7071ea 100644 --- a/src/libCom/test/epicsOkToBlockTest.cpp +++ b/src/libCom/test/epicsOkToBlockTest.cpp @@ -30,14 +30,13 @@ extern "C" { static void thread(void *arg) { info *pinfo = (info *)arg; - epicsThreadId idSelf = epicsThreadGetIdSelf(); int isOkToBlock; printf("thread %s isOkToBlock %d\n", epicsThreadGetNameSelf(),pinfo->isOkToBlock); - epicsThreadSetOkToBlock(idSelf,pinfo->isOkToBlock); + epicsThreadSetOkToBlock(pinfo->isOkToBlock); epicsThreadSleep(1.0); - isOkToBlock = epicsThreadIsOkToBlock(idSelf); + isOkToBlock = epicsThreadIsOkToBlock(); printf("thread %s epicsThreadIsOkToBlock %d\n", epicsThreadGetNameSelf(),isOkToBlock); epicsThreadSleep(.1); diff --git a/src/misc/iocInit.c b/src/misc/iocInit.c index 9cf81d934..9b79f419c 100644 --- a/src/misc/iocInit.c +++ b/src/misc/iocInit.c @@ -79,8 +79,7 @@ int epicsShareAPI iocInit() errlogPrintf("iocInit can only be called once\n"); return(-1); } - if(!epicsThreadIsOkToBlock(epicsThreadGetIdSelf())) - epicsThreadSetOkToBlock(epicsThreadGetIdSelf(),1); + if(!epicsThreadIsOkToBlock()) epicsThreadSetOkToBlock(1); errlogPrintf("Starting iocInit\n"); if (!pdbbase) { errlogPrintf("iocInit aborting because No database\n");