epicsThreadIsOkToBlock epicsThreadSetOkToBlock only for calling thread

This commit is contained in:
Marty Kraimer
2004-07-13 14:49:18 +00:00
parent f54d1ca30a
commit 629b14d3d4
5 changed files with 35 additions and 90 deletions
+35 -1
View File
@@ -240,7 +240,7 @@ const char *epicsThread::getNameSelf ()
return epicsThreadGetNameSelf ();
}
bool epicsThread::isOkToBlock ()
bool epicsThread::isOkToBlock ()
{
return static_cast<int>(epicsThreadIsOkToBlock());
}
@@ -250,3 +250,37 @@ void epicsThread::setOkToBlock(bool isOkToBlock)
epicsThreadSetOkToBlock(static_cast<int>(isOkToBlock));
}
extern "C" {
static epicsThreadOnceId okToBlockOnce = EPICS_THREAD_ONCE_INIT;
epicsThreadPrivateId okToBlockPrivate;
typedef struct okToBlockStruct okToBlockStruct;
struct okToBlockStruct {
int okToBlock;
};
static okToBlockStruct okToBlockNo = {0};
static okToBlockStruct okToBlockYes = {1};
static void epicsThreadOnceIdInit(void *)
{
okToBlockPrivate = epicsThreadPrivateCreate();
}
int epicsShareAPI epicsThreadIsOkToBlock(void)
{
okToBlockStruct *pokToBlock;
void *arg = 0;
epicsThreadOnce(&okToBlockOnce,epicsThreadOnceIdInit,arg);
pokToBlock = (okToBlockStruct*)epicsThreadPrivateGet(okToBlockPrivate);
return (pokToBlock ? pokToBlock->okToBlock : 0);
}
void epicsShareAPI epicsThreadSetOkToBlock(int isOkToBlock)
{
okToBlockStruct *pokToBlock;
void *arg = 0;
epicsThreadOnce(&okToBlockOnce,epicsThreadOnceIdInit,arg);
pokToBlock = (isOkToBlock) ? &okToBlockYes : &okToBlockNo;
epicsThreadPrivateSet(okToBlockPrivate,pokToBlock);
}
} // extern "C"