Cleanup of epicsThread hooks
- move declarations to epicsThread.h, use epicsThreadId type - use static elllist initializer for static lists
This commit is contained in:
@@ -101,6 +101,16 @@ epicsShareFunc void epicsShareAPI epicsThreadShowAll(unsigned int level);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadShow(
|
||||
epicsThreadId id,unsigned int level);
|
||||
|
||||
/* Hooks being called when a thread starts or exits */
|
||||
typedef void (*EPICS_THREAD_HOOK_ROUTINE)(epicsThreadId id);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadHooksInit(void);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadAddStartHook(EPICS_THREAD_HOOK_ROUTINE hook);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadAddExitHook(EPICS_THREAD_HOOK_ROUTINE hook);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadRunStartHooks(epicsThreadId id);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadRunExitHooks(epicsThreadId id);
|
||||
epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadDefaultStartHook;
|
||||
epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadDefaultExitHook;
|
||||
|
||||
typedef struct epicsThreadPrivateOSD * epicsThreadPrivateId;
|
||||
epicsShareFunc epicsThreadPrivateId epicsShareAPI epicsThreadPrivateCreate(void);
|
||||
epicsShareFunc void epicsShareAPI epicsThreadPrivateDelete(epicsThreadPrivateId id);
|
||||
|
||||
@@ -37,16 +37,6 @@ typedef struct epicsThreadOSD {
|
||||
char name[1]; /* actually larger */
|
||||
} epicsThreadOSD;
|
||||
|
||||
/* Hooks being called when a thread starts or exits */
|
||||
typedef void (*EPICS_THREAD_HOOK_ROUTINE)(epicsThreadOSD *pthreadInfo);
|
||||
epicsShareFunc void epicsThreadHooksInit();
|
||||
epicsShareFunc void epicsThreadAddStartHook(EPICS_THREAD_HOOK_ROUTINE hook);
|
||||
epicsShareFunc void epicsThreadAddExitHook(EPICS_THREAD_HOOK_ROUTINE hook);
|
||||
epicsShareFunc void epicsThreadRunStartHooks(epicsThreadOSD *pthreadInfo);
|
||||
epicsShareFunc void epicsThreadRunExitHooks(epicsThreadOSD *pthreadInfo);
|
||||
epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadDefaultStartHook;
|
||||
epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadDefaultExitHook;
|
||||
|
||||
epicsShareFunc pthread_t epicsShareAPI epicsThreadGetPosixThreadId(epicsThreadId id);
|
||||
|
||||
epicsShareFunc void epicsShowThreadInfo(epicsThreadOSD *pthreadInfo, unsigned int level);
|
||||
|
||||
@@ -30,8 +30,8 @@ typedef struct epicsThreadHook {
|
||||
EPICS_THREAD_HOOK_ROUTINE func;
|
||||
} epicsThreadHook;
|
||||
|
||||
static ELLLIST startHooks;
|
||||
static ELLLIST exitHooks;
|
||||
static ELLLIST startHooks = ELLLIST_INIT;
|
||||
static ELLLIST exitHooks = ELLLIST_INIT;
|
||||
static epicsMutexId hookLock;
|
||||
|
||||
static void addHook (ELLLIST *list, EPICS_THREAD_HOOK_ROUTINE func)
|
||||
@@ -46,13 +46,13 @@ static void addHook (ELLLIST *list, EPICS_THREAD_HOOK_ROUTINE func)
|
||||
epicsMutexUnlock(hookLock);
|
||||
}
|
||||
|
||||
static void runHooks (ELLLIST *list, epicsThreadOSD *pthreadInfo) {
|
||||
static void runHooks (ELLLIST *list, epicsThreadId id) {
|
||||
epicsThreadHook *pHook;
|
||||
|
||||
/* As we're only ever inserting hooks at the head of the list, forward traversing is safe */
|
||||
pHook = (epicsThreadHook *) ellFirst(list);
|
||||
while (pHook) {
|
||||
pHook->func(pthreadInfo);
|
||||
pHook->func(id);
|
||||
pHook = (epicsThreadHook *) ellNext(&pHook->node);
|
||||
}
|
||||
}
|
||||
@@ -67,21 +67,19 @@ void epicsThreadAddExitHook(EPICS_THREAD_HOOK_ROUTINE func)
|
||||
addHook(&exitHooks, func);
|
||||
}
|
||||
|
||||
void epicsThreadHooksInit()
|
||||
void epicsThreadHooksInit(void)
|
||||
{
|
||||
hookLock = epicsMutexMustCreate();
|
||||
ellInit(&startHooks);
|
||||
ellInit(&exitHooks);
|
||||
if (epicsThreadDefaultStartHook) epicsThreadAddStartHook(epicsThreadDefaultStartHook);
|
||||
if (epicsThreadDefaultExitHook) epicsThreadAddExitHook(epicsThreadDefaultExitHook);
|
||||
}
|
||||
|
||||
void epicsThreadRunStartHooks(epicsThreadOSD *pthreadInfo)
|
||||
void epicsThreadRunStartHooks(epicsThreadId id)
|
||||
{
|
||||
runHooks(&startHooks, pthreadInfo);
|
||||
runHooks(&startHooks, id);
|
||||
}
|
||||
|
||||
void epicsThreadRunExitHooks(epicsThreadOSD *pthreadInfo)
|
||||
void epicsThreadRunExitHooks(epicsThreadId id)
|
||||
{
|
||||
runHooks(&exitHooks, pthreadInfo);
|
||||
runHooks(&exitHooks, id);
|
||||
}
|
||||
|
||||
@@ -36,16 +36,6 @@ typedef struct epicsThreadOSD {
|
||||
char name[1]; /* actually larger */
|
||||
} epicsThreadOSD;
|
||||
|
||||
/* Hooks being called when a thread starts or exits */
|
||||
typedef void (*EPICS_THREAD_HOOK_ROUTINE)(epicsThreadOSD *pthreadInfo);
|
||||
epicsShareFunc void epicsThreadHooksInit();
|
||||
epicsShareFunc void epicsThreadAddStartHook(EPICS_THREAD_HOOK_ROUTINE hook);
|
||||
epicsShareFunc void epicsThreadAddExitHook(EPICS_THREAD_HOOK_ROUTINE hook);
|
||||
epicsShareFunc void epicsThreadRunStartHooks(epicsThreadOSD *pthreadInfo);
|
||||
epicsShareFunc void epicsThreadRunExitHooks(epicsThreadOSD *pthreadInfo);
|
||||
epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadDefaultStartHook;
|
||||
epicsShareExtern EPICS_THREAD_HOOK_ROUTINE epicsThreadDefaultExitHook;
|
||||
|
||||
epicsShareFunc pthread_t epicsShareAPI epicsThreadGetPosixThreadId(epicsThreadId id);
|
||||
|
||||
epicsShareFunc void epicsShowThreadInfo(epicsThreadOSD *pthreadInfo, unsigned int level);
|
||||
|
||||
Reference in New Issue
Block a user