summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrpj <rpj>1999-02-20 02:56:35 +0000
committerrpj <rpj>1999-02-20 02:56:35 +0000
commit4a30695c72d49a8d4a7c9dd7892456170eaa39d6 (patch)
treeb89c57145b21edc2daa7c031e18e3e2acc4391cf
parent2f59893abc1ef66e851c4bba56c4b421710d4183 (diff)
Sat Feb 20 16:03:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* 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.
-rw-r--r--ChangeLog12
-rw-r--r--dll.c22
-rw-r--r--mutex.c6
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 <rpj@ixobrychus.canberra.edu.au>
+Sat Feb 20 16:03:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
+
+ * 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 <rpj@ixobrychus.canberra.edu.au>
* 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 <rpj@ixobrychus.canberra.edu.au>
+Thu Feb 18 16:17:30 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* 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
@@ -16,6 +16,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
*/
static HINSTANCE _pthread_h_kernel32;
@@ -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'