summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2009-07-14 13:17:25 +0800
committerBrian Paul <brianp@vmware.com>2009-08-24 11:46:15 -0600
commit3076d1617db67d49ff773096123c1fa47af58272 (patch)
tree3f70139561702fef36b04c7d9f9c6b9a0eb74527
parentfc2feea685d86c520fb01199caa5a46eae20c7aa (diff)
glapi: Static mutex does not work on WIN32_THREADS.
This re-introduces the race in _glapi_check_multithread, but avoids a crash on windows. Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
-rw-r--r--src/mesa/glapi/glapi.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index b9ab9c07be..e36fccb354 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -198,7 +198,16 @@ PUBLIC const void *_glapi_Context = NULL;
#if defined(THREADS)
+#ifdef WIN32_THREADS
+/* _glthread_DECLARE_STATIC_MUTEX is broken on windows. There will be race! */
+#define CHECK_MULTITHREAD_LOCK()
+#define CHECK_MULTITHREAD_UNLOCK()
+#else
_glthread_DECLARE_STATIC_MUTEX(ThreadCheckMutex);
+#define CHECK_MULTITHREAD_LOCK() _glthread_LOCK_MUTEX(ThreadCheckMutex)
+#define CHECK_MULTITHREAD_UNLOCK() _glthread_UNLOCK_MUTEX(ThreadCheckMutex)
+#endif
+
static GLboolean ThreadSafe = GL_FALSE; /**< In thread-safe mode? */
_glthread_TSD _gl_DispatchTSD; /**< Per-thread dispatch pointer */
static _glthread_TSD ContextTSD; /**< Per-thread context pointer */
@@ -238,7 +247,7 @@ _glapi_check_multithread(void)
if (ThreadSafe)
return;
- _glthread_LOCK_MUTEX(ThreadCheckMutex);
+ CHECK_MULTITHREAD_LOCK();
if (firstCall) {
/* initialize TSDs */
(void) _glthread_GetTSD(&ContextTSD);
@@ -252,7 +261,7 @@ _glapi_check_multithread(void)
_glapi_set_dispatch(NULL);
_glapi_set_context(NULL);
}
- _glthread_UNLOCK_MUTEX(ThreadCheckMutex);
+ CHECK_MULTITHREAD_UNLOCK();
#endif
}