more changes for epicsAtExit handler

This commit is contained in:
Marty Kraimer
2005-11-15 13:15:31 +00:00
parent 171977d01f
commit 990a0b3ed1

View File

@@ -58,6 +58,8 @@ STATIC epicsMutexId workListLock; /*Mutual exclusions semaphores for workList*/
STATIC epicsEventId workListEvent; /*wakeup event for dbCaTask*/
STATIC int removesOutstanding = 0;
STATIC int removesOutstandingWarning = 10000;
STATIC volatile int exitRequest = 0;
STATIC epicsEventId exitEvent;
struct ca_client_context * dbCaClientContext;
@@ -170,6 +172,7 @@ void epicsShareAPI dbCaLinkInit(void)
ellInit(&workList);
workListLock = epicsMutexMustCreate();
workListEvent = epicsEventMustCreate(epicsEventEmpty);
exitEvent = epicsEventMustCreate(epicsEventEmpty);
epicsThreadCreate("dbCaLink", epicsThreadPriorityMedium,
epicsThreadGetStackSize(epicsThreadStackBig),
(EPICSTHREADFUNC) dbCaTask,0);
@@ -770,7 +773,9 @@ STATIC void getAttribEventCallback(struct event_handler_args arg)
static void exitHandler(void *pvt)
{
ca_context_destroy();
exitRequest = 1;
epicsEventSignal(workListEvent);
epicsEventMustWait(exitEvent);
}
void dbCaTask()
@@ -792,6 +797,7 @@ void dbCaTask()
short link_action;
int status;
if(exitRequest) break;
epicsMutexMustLock(workListLock);
if(!(pca = (caLink *)ellFirst(&workList))){/*Take off list head*/
epicsMutexUnlock(workListLock);
@@ -932,7 +938,11 @@ void dbCaTask()
printLinks(pca);
}
}
if(exitRequest) break;
}
if(exitRequest) break;
SEVCHK(ca_flush_io(),"dbCaTask");
}
ca_context_destroy();
epicsEventSignal(exitEvent);
}