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>
This commit is contained in:
Chia-I Wu
2009-07-14 13:17:25 +08:00
committed by Brian Paul
parent fc2feea685
commit 3076d1617d
+11 -2
View File
@@ -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
}