From 63b588defb7a83e5fa3d7c9dae036734070a8535 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Wed, 19 Mar 2003 23:18:28 +0000 Subject: [PATCH] possible workaround for unreproducable race during borland dll rundown --- src/libCom/osi/os/WIN32/osdThread.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/libCom/osi/os/WIN32/osdThread.c b/src/libCom/osi/os/WIN32/osdThread.c index 57d9823a7..47e0a152c 100644 --- a/src/libCom/osi/os/WIN32/osdThread.c +++ b/src/libCom/osi/os/WIN32/osdThread.c @@ -120,16 +120,18 @@ static void threadCleanupWIN32 ( void ) win32ThreadParam * pParm; WaitForSingleObject ( win32ThreadGlobalMutex, INFINITE ); + while ( pParm = ( win32ThreadParam * ) ellFirst ( & threadList ) ) { epicsParmCleanupWIN32 ( pParm ); } - ReleaseMutex ( win32ThreadGlobalMutex ); if ( tlsIndexThreadLibraryEPICS != 0xFFFFFFFF ) { TlsFree ( tlsIndexThreadLibraryEPICS ); tlsIndexThreadLibraryEPICS = 0xFFFFFFFF; } + ReleaseMutex ( win32ThreadGlobalMutex ); + if ( win32ThreadGlobalMutex ) { CloseHandle ( win32ThreadGlobalMutex ); win32ThreadGlobalMutex = NULL; @@ -735,6 +737,27 @@ epicsShareFunc void epicsShareAPI epicsThreadSleep ( double seconds ) Sleep ( milliSecDelay ); } +/* + * epicsThreadGetIdSelf () + */ +double epicsShareAPI epicsThreadSleepQuantum () +{ + static const double secPerTick = 100e-9; + DWORD adjustment; + DWORD delay; + BOOL disabled; + BOOL success; + + success = GetSystemTimeAdjustment ( + & adjustment, & delay, & disabled ); + if ( success ) { + return delay * secPerTick; + } + else { + return 0.0; + } +} + /* * epicsThreadGetIdSelf () */