From 4a30695c72d49a8d4a7c9dd7892456170eaa39d6 Mon Sep 17 00:00:00 2001 From: rpj Date: Sat, 20 Feb 1999 02:56:35 +0000 Subject: Sat Feb 20 16:03:30 1999 Ross Johnson * dll.c (DLLMain): Expand TryEnterCriticalSection support test. * mutex.c (pthread_mutex_trylock): The check for _pthread_try_enter_critical_section == NULL should have been removed long ago. --- ChangeLog | 12 ++++++++++-- dll.c | 22 ++++++++++++++++++++++ mutex.c | 6 ------ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca8a885..1d340f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,19 @@ -Fri Feb 19 16:2s1703:30 1999 Ross Johnson +Sat Feb 20 16:03:30 1999 Ross Johnson + + * dll.c (DLLMain): Expand TryEnterCriticalSection support test. + + * mutex.c (pthread_mutex_trylock): The check for + _pthread_try_enter_critical_section == NULL should have been + removed long ago. + +Fri Feb 19 16:03:30 1999 Ross Johnson * sync.c (pthread_join): Fix pthread_equal() test. * mutex.c (pthread_mutex_trylock): Check mutex != NULL before using it. -Thu Feb 18 16:2s1703:30 1999 Ross Johnson +Thu Feb 18 16:17:30 1999 Ross Johnson * misc.c (pthread_equal): Fix inverted result. diff --git a/dll.c b/dll.c index b440500..25d89c3 100644 --- a/dll.c +++ b/dll.c @@ -15,6 +15,11 @@ */ BOOL (WINAPI *_pthread_try_enter_critical_section)(LPCRITICAL_SECTION) = NULL; +/* + * We use this to double-check that TryEnterCriticalSection works. + */ +CRITICAL_SECTION cs; + /* * Handle to kernel32.dll */ @@ -67,6 +72,23 @@ DllMain ( (BOOL (PT_STDCALL *)(LPCRITICAL_SECTION)) GetProcAddress(_pthread_h_kernel32, (LPCSTR) "TryEnterCriticalSection"); + + if (_pthread_try_enter_critical_section != NULL) + { + InitializeCriticalSection(&cs); + if ((*_pthread_try_enter_critical_section)(&cs)) + { + LeaveCriticalSection(&cs); + } + else + { + /* + * Not really supported (Win98?). + */ + _pthread_try_enter_critical_section = NULL; + } + DeleteCriticalSection(&cs); + } break; case DLL_THREAD_ATTACH: diff --git a/mutex.c b/mutex.c index 2b28cec..578617d 100644 --- a/mutex.c +++ b/mutex.c @@ -513,12 +513,6 @@ pthread_mutex_trylock(pthread_mutex_t *mutex) return EINVAL; } - if (mutex->mutex == 0 && _pthread_try_enter_critical_section == NULL) - { - /* TryEnterCriticalSection does not exist in the OS; return ENOSYS. */ - return ENOSYS; - } - /* * We do a quick check to see if we need to do more work * to initialise a static mutex. We check 'staticinit' -- cgit v1.2.3