mapi: _glthread_DECLARE_STATIC_MUTEX is not broken on Windows.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 6 Mar 2011 09:11:59 +0000 (09:11 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sun, 6 Mar 2011 09:11:59 +0000 (09:11 +0000)
src/mapi/mapi/u_current.c
src/mapi/mapi/u_thread.c
src/mapi/mapi/u_thread.h

index 7946d2a274194571a517e9f85b1447eac7535530..21a07abbae509e80f1cc8a435149d0a3a66af2bf 100644 (file)
@@ -144,15 +144,7 @@ u_current_init_tsd(void)
 /**
  * Mutex for multithread check.
  */
-#ifdef WIN32
-/* _glthread_DECLARE_STATIC_MUTEX is broken on windows.  There will be race! */
-#define CHECK_MULTITHREAD_LOCK()
-#define CHECK_MULTITHREAD_UNLOCK()
-#else
 u_mutex_declare_static(ThreadCheckMutex);
-#define CHECK_MULTITHREAD_LOCK() u_mutex_lock(ThreadCheckMutex)
-#define CHECK_MULTITHREAD_UNLOCK() u_mutex_unlock(ThreadCheckMutex)
-#endif
 
 /**
  * We should call this periodically from a function such as glXMakeCurrent
@@ -167,7 +159,7 @@ u_current_init(void)
    if (ThreadSafe)
       return;
 
-   CHECK_MULTITHREAD_LOCK();
+   u_mutex_lock(ThreadCheckMutex);
    if (firstCall) {
       u_current_init_tsd();
 
@@ -179,7 +171,7 @@ u_current_init(void)
       u_current_set(NULL);
       u_current_set_user(NULL);
    }
-   CHECK_MULTITHREAD_UNLOCK();
+   u_mutex_unlock(ThreadCheckMutex);
 }
 
 #else
index 138db47b5cd4d11d8e70605775f76307159d2329..12e748fe8bac1b38177a22157b99e4f8aa8fea7f 100644 (file)
@@ -113,11 +113,6 @@ u_tsd_set(struct u_tsd *tsd, void *ptr)
  */
 #ifdef WIN32
 
-static void InsteadOf_exit(int nCode)
-{
-   DWORD dwErr = GetLastError();
-}
-
 unsigned long
 u_thread_self(void)
 {
@@ -131,7 +126,7 @@ u_tsd_init(struct u_tsd *tsd)
    tsd->key = TlsAlloc();
    if (tsd->key == TLS_OUT_OF_INDEXES) {
       perror(INIT_TSD_ERROR);
-      InsteadOf_exit(-1);
+      exit(-1);
    }
    tsd->initMagic = INIT_MAGIC;
 }
@@ -168,7 +163,7 @@ u_tsd_set(struct u_tsd *tsd, void *ptr)
    }
    if (TlsSetValue(tsd->key, ptr) == 0) {
       perror(SET_TSD_ERROR);
-      InsteadOf_exit(-1);
+      exit(-1);
    }
 }
 
index 92a0a3916d0179614c53d2301d1b54782314aee7..1cc8be3fa3f6c7651c0b90b9c9983db56f950a53 100644 (file)
@@ -97,7 +97,7 @@ typedef CRITICAL_SECTION u_mutex;
 
 /* http://locklessinc.com/articles/pthreads_on_windows/ */
 #define u_mutex_declare_static(name) \
-   /* static */ u_mutex name = {(void*)-1, -1, 0, 0, 0, 0}
+   static u_mutex name = {(PCRITICAL_SECTION_DEBUG)-1, -1, 0, 0, 0, 0}
 
 #define u_mutex_init(name)    InitializeCriticalSection(&name)
 #define u_mutex_destroy(name) DeleteCriticalSection(&name)