glapi: Static mutex does not work on WIN32_THREADS.
authorChia-I Wu <olvaffe@gmail.com>
Tue, 14 Jul 2009 05:17:25 +0000 (13:17 +0800)
committerBrian Paul <brianp@vmware.com>
Mon, 24 Aug 2009 17:46:15 +0000 (11:46 -0600)
This re-introduces the race in _glapi_check_multithread, but avoids a
crash on windows.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
src/mesa/glapi/glapi.c

index b9ab9c07be1ea8d571ff59b8c84b20eaf55fe63b..e36fccb354cfa840115ebb6141aef62754d69d6e 100644 (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
 }