Cleanup of epicsThread hooks

- move declarations to epicsThread.h, use epicsThreadId type
- use static elllist initializer for static lists
This commit is contained in:
Ralph Lange
2012-06-29 11:15:47 +02:00
parent 222ea314b0
commit 803777329c
4 changed files with 19 additions and 31 deletions
+10
View File
@@ -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);
-10
View File
@@ -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);
+9 -11
View File
@@ -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);
}
-10
View File
@@ -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);