BeOS's _glthread_DECLARE_STATIC_MUTEX() couldn't be used outside a function
authorPhilippe Houdoin <phoudoin@freedesktop.org>
Sat, 14 Aug 2004 09:48:57 +0000 (09:48 +0000)
committerPhilippe Houdoin <phoudoin@freedesktop.org>
Sat, 14 Aug 2004 09:48:57 +0000 (09:48 +0000)
because she called create_sem(). Now the semaphore creation is made at first
_glthread_LOCK_MUTEX() call.

src/mesa/glapi/glthread.h

index 283d549df0749d69a7dadd9f4e052ad8c427897d..6dc136e975ea3b0215468dc5260b627907eb90a8 100644 (file)
@@ -65,7 +65,8 @@
 #define GLTHREAD_H
 
 
-#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(XTHREADS)
+#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || \
+       defined(XTHREADS) || defined(BEOS_THREADS)
 #define THREADS
 #endif
 
@@ -232,6 +233,7 @@ typedef xmutex_rec _glthread_Mutex;
  * BeOS threads. R5.x required.
  */
 #ifdef BEOS_THREADS
+
 #include <kernel/OS.h>
 #include <support/TLS.h>
 
@@ -249,11 +251,12 @@ typedef struct {
 } benaphore;
 typedef benaphore _glthread_Mutex;
 
-#define _glthread_DECLARE_STATIC_MUTEX(name)  static _glthread_Mutex name = { 0,
-create_sem(0, #name"_benaphore") }
-#define _glthread_INIT_MUTEX(name)    name.sem = create_sem(0, #name"_benaphore"), name.lock = 0
-#define _glthread_LOCK_MUTEX(name)    if((atomic_add(&(name.lock), 1)) >= 1) acquire_sem(name.sem)
-#define _glthread_UNLOCK_MUTEX(name)  if((atomic_add(&(name.lock), -1)) > 1) release_sem(name.sem)
+#define _glthread_DECLARE_STATIC_MUTEX(name)  static _glthread_Mutex name = { 0, 0 }
+#define _glthread_INIT_MUTEX(name)     name.sem = create_sem(0, #name"_benaphore"), name.lock = 0
+#define _glthread_DESTROY_MUTEX(name)  delete_sem(name.sem), name.lock = 0
+#define _glthread_LOCK_MUTEX(name)     if (name.sem == 0) _glthread_INIT_MUTEX(name); \
+                                                                               if (atomic_add(&(name.lock), 1) >= 1) acquire_sem(name.sem)
+#define _glthread_UNLOCK_MUTEX(name)   if (atomic_add(&(name.lock), -1) > 1) release_sem(name.sem)
 
 #endif /* BEOS_THREADS */