epicsThreadIsOkToBlock epicsThreadSetOkToBlock only for calling thread
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -48,7 +48,6 @@ struct taskVar {
|
||||
void *parm;
|
||||
unsigned int threadVariableCapacity;
|
||||
void **threadVariables;
|
||||
int okToBlock;
|
||||
};
|
||||
static epicsMutexId taskVarMutex;
|
||||
static struct taskVar *taskVarHead;
|
||||
@@ -214,7 +213,6 @@ setThreadInfo (rtems_id tid, const char *name, EPICSTHREADFUNC funptr,void *parm
|
||||
v->parm = parm;
|
||||
v->threadVariableCapacity = 0;
|
||||
v->threadVariables = NULL;
|
||||
v->okToBlock = 0;
|
||||
note = (rtems_unsigned32)v;
|
||||
rtems_task_set_note (tid, RTEMS_NOTEPAD_TASKVAR, note);
|
||||
taskVarLock ();
|
||||
@@ -454,43 +452,6 @@ epicsThreadId epicsThreadGetId (const char *name)
|
||||
return (epicsThreadId)tid;
|
||||
}
|
||||
|
||||
int epicsThreadIsOkToBlock (void)
|
||||
{
|
||||
rtems_id tid = (rtems_id)epicsThreadGetIdSelf();
|
||||
rtems_status_code sc;
|
||||
rtems_unsigned32 note;
|
||||
struct taskVar *v;
|
||||
int okToBlock;
|
||||
|
||||
taskVarLock ();
|
||||
sc = rtems_task_get_note (tid, RTEMS_NOTEPAD_TASKVAR, ¬e);
|
||||
if (sc == RTEMS_SUCCESSFUL) {
|
||||
v = (void *)note;
|
||||
okToBlock = v->okToBlock;
|
||||
}
|
||||
else {
|
||||
okToBlock = 0;
|
||||
}
|
||||
taskVarUnlock ();
|
||||
return okToBlock;
|
||||
}
|
||||
|
||||
void epicsThreadSetOkToBlock (int isOkToBlock)
|
||||
{
|
||||
rtems_id tid = (rtems_id)epicsThreadGetIdSelf();
|
||||
rtems_status_code sc;
|
||||
rtems_unsigned32 note;
|
||||
struct taskVar *v;
|
||||
|
||||
taskVarLock ();
|
||||
sc = rtems_task_get_note (tid, RTEMS_NOTEPAD_TASKVAR, ¬e);
|
||||
if (sc == RTEMS_SUCCESSFUL) {
|
||||
v = (void *)note;
|
||||
v->okToBlock = isOkToBlock;
|
||||
}
|
||||
taskVarUnlock ();
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure func() is run only once.
|
||||
*/
|
||||
|
||||
@@ -52,7 +52,6 @@ typedef struct win32ThreadParam {
|
||||
DWORD id;
|
||||
unsigned epicsPriority;
|
||||
char isSuspended;
|
||||
int isOkToBlock;
|
||||
} win32ThreadParam;
|
||||
|
||||
typedef struct epicsThreadPrivateOSD {
|
||||
@@ -845,28 +844,6 @@ epicsShareFunc void epicsShareAPI epicsThreadGetName (
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsThreadIsOkToBlock ()
|
||||
*/
|
||||
epicsShareFunc int epicsShareAPI epicsThreadIsOkToBlock (void);
|
||||
{
|
||||
epicsThreadId id = epicsThreadGetIdSelf();
|
||||
win32ThreadParam *pParm = ( win32ThreadParam * ) id;
|
||||
|
||||
return pParm->isOkToBlock;
|
||||
}
|
||||
|
||||
/*
|
||||
* epicsThreadSetOkToBlock ()
|
||||
*/
|
||||
epicsShareFunc int epicsShareAPI epicsThreadSetOkToBlock ( int isOkToBlock)
|
||||
{
|
||||
epicsThreadId id = epicsThreadGetIdSelf();
|
||||
win32ThreadParam *pParm = ( win32ThreadParam * ) id;
|
||||
|
||||
pParm->isOkToBlock = isOkToBlock;
|
||||
}
|
||||
|
||||
/*
|
||||
* epics_GetThreadPriorityAsString ()
|
||||
*/
|
||||
|
||||
@@ -55,7 +55,6 @@ typedef struct epicsThreadOSD {
|
||||
int isSuspended;
|
||||
unsigned int osiPriority;
|
||||
char *name;
|
||||
int isOkToBlock;
|
||||
} epicsThreadOSD;
|
||||
|
||||
static pthread_key_t getpthreadInfo;
|
||||
@@ -583,17 +582,6 @@ const char *epicsThreadGetNameSelf()
|
||||
return(pthreadInfo->name);
|
||||
}
|
||||
|
||||
int epicsThreadIsOkToBlock(void)
|
||||
{
|
||||
epicsThreadId pthreadInfo = epicsThreadGetIdSelf();
|
||||
return pthreadInfo->isOkToBlock;
|
||||
}
|
||||
|
||||
void epicsThreadSetOkToBlock(int isOkToBlock) {
|
||||
epicsThreadId pthreadInfo = epicsThreadGetIdSelf();
|
||||
pthreadInfo->isOkToBlock = isOkToBlock;
|
||||
}
|
||||
|
||||
void epicsThreadGetName(epicsThreadId pthreadInfo, char *name, size_t size)
|
||||
{
|
||||
assert(epicsThreadOnceCalled);
|
||||
|
||||
@@ -40,8 +40,6 @@
|
||||
static const unsigned stackSizeTable[epicsThreadStackBig+1] =
|
||||
{4000*ARCH_STACK_FACTOR, 6000*ARCH_STACK_FACTOR, 11000*ARCH_STACK_FACTOR};
|
||||
|
||||
/*tasVar for isOkToBlock*/
|
||||
int isOkToBlock;
|
||||
|
||||
/* definitions for implementation of epicsThreadPrivate */
|
||||
static void **papTSD = 0;
|
||||
@@ -128,7 +126,6 @@ static void createFunction(EPICSTHREADFUNC func, void *parm)
|
||||
(*func)(parm);
|
||||
free(papTSD);
|
||||
taskVarDelete(tid,(int *)&papTSD);
|
||||
taskVarDelete(tid,&isOkToBlock);
|
||||
}
|
||||
|
||||
epicsThreadId epicsThreadCreate(const char *name,
|
||||
@@ -149,8 +146,6 @@ epicsThreadId epicsThreadCreate(const char *name,
|
||||
errlogPrintf("epicsThreadCreate taskSpawn failure for %s\n",name);
|
||||
return(0);
|
||||
}
|
||||
taskVarAdd(tid,&isOkToBlock);
|
||||
taskVarSet(tid,&isOkToBlock,0);
|
||||
return((epicsThreadId)tid);
|
||||
}
|
||||
|
||||
@@ -276,16 +271,6 @@ void epicsThreadGetName (epicsThreadId id, char *name, size_t size)
|
||||
name[size-1] = '\0';
|
||||
}
|
||||
|
||||
int epicsThreadIsOkToBlock(void)
|
||||
{
|
||||
return taskVarGet(taskIdSelf(),&isOkToBlock);
|
||||
}
|
||||
|
||||
void epicsThreadSetOkToBlock(int yesNo)
|
||||
{
|
||||
taskVarSet(taskIdSelf(),&isOkToBlock,yesNo);
|
||||
}
|
||||
|
||||
void epicsThreadShowAll(unsigned int level)
|
||||
{
|
||||
taskShow(0,2);
|
||||
|
||||
Reference in New Issue
Block a user