From 3d377eed1df8fbd185106c952d810f08f90af293 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Thu, 16 Sep 2004 18:22:33 +0000 Subject: [PATCH] removed atexit handler that calls epicsThreadExit because: o recursive exit call is bad o this causes shutdown problems with DLL codes on windows => the workaround is an atexit handler that calls epicsExitCallAtExits in the poosix osdThreads atexit handler --- src/libCom/misc/epicsExit.c | 5 +---- src/libCom/osi/os/posix/osdThread.c | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libCom/misc/epicsExit.c b/src/libCom/misc/epicsExit.c index dc0a0193c..3884b9f54 100644 --- a/src/libCom/misc/epicsExit.c +++ b/src/libCom/misc/epicsExit.c @@ -14,11 +14,11 @@ #include #include +#define epicsExportSharedSymbols #include "ellLib.h" #include "epicsThread.h" #include "epicsMutex.h" #include "cantProceed.h" -#define epicsExportSharedSymbols #include "epicsExit.h" typedef void (*epicsExitFunc)(void *arg); @@ -38,13 +38,10 @@ static exitPvt exitPvtInstance; static exitPvt *pexitPvt = &exitPvtInstance; static epicsThreadOnceId createOnce = EPICS_THREAD_ONCE_INIT; -static void atExit(void) {epicsExit(0);} - static void createExitPvt(void) { pexitPvt->lock = epicsMutexMustCreate(); ellInit(&pexitPvt->list); - atexit(atExit); } epicsShareFunc void epicsShareAPI epicsExitCallAtExits(void) diff --git a/src/libCom/osi/os/posix/osdThread.c b/src/libCom/osi/os/posix/osdThread.c index ca190253a..9f573f4cb 100644 --- a/src/libCom/osi/os/posix/osdThread.c +++ b/src/libCom/osi/os/posix/osdThread.c @@ -33,6 +33,7 @@ #include "cantProceed.h" #include "errlog.h" #include "epicsAssert.h" +#include "epicsExit.h" /* Until these can be demonstrated to work leave them undefined*/ #undef _POSIX_THREAD_ATTR_STACKSIZE @@ -106,6 +107,7 @@ static void myAtExit(void) fprintf(stderr,"osdThread myAtExit extered multiple times\n"); return; } + epicsExitCallAtExits(); status = pthread_mutex_lock(&listLock); checkStatusQuit(status,"pthread_mutex_lock","myAtExit"); pthreadSelf = (epicsThreadOSD *)pthread_getspecific(getpthreadInfo);