[Mesa-dev] [PATCH] os: add spinlocks

Marek Olšák maraeo at gmail.com
Tue Dec 14 05:15:39 PST 2010


---
 src/gallium/auxiliary/os/os_thread.h |   51 ++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/os/os_thread.h b/src/gallium/auxiliary/os/os_thread.h
index a084310..6c25b33 100644
--- a/src/gallium/auxiliary/os/os_thread.h
+++ b/src/gallium/auxiliary/os/os_thread.h
@@ -92,6 +92,23 @@ typedef pthread_mutex_t pipe_mutex;
    (void) pthread_mutex_unlock(&(mutex))
 
 
+/* pipe_spinlock
+ */
+typedef pthread_spinlock_t pipe_spinlock;
+
+#define pipe_spin_init(spinlock) \
+   (void) pthread_spin_init(&(spinlock), 0)
+
+#define pipe_spin_destroy(spinlock) \
+   (void) pthread_spin_destroy(&(spinlock))
+
+#define pipe_spin_lock(spinlock) \
+   (void) pthread_spin_lock(&(spinlock))
+
+#define pipe_spin_unlock(spinlock) \
+   (void) pthread_spin_unlock(&(spinlock))
+
+
 /* pipe_condvar
  */
 typedef pthread_cond_t pipe_condvar;
@@ -167,6 +184,24 @@ typedef CRITICAL_SECTION pipe_mutex;
 #define pipe_mutex_unlock(mutex) \
    LeaveCriticalSection(&mutex)
 
+
+/* pipe_spinlock (fake implemention for windows using mutex)
+ */
+typedef pipe_mutex pipe_spinlock;
+
+#define pipe_spin_init(spinlock) \
+   pipe_mutex_init(spinlock)
+
+#define pipe_spin_destroy(spinlock) \
+   pipe_mutex_destroy(spinlock)
+
+#define pipe_spin_lock(spinlock) \
+   pipe_mutex_lock(spinlock)
+
+#define pipe_spin_unlock(spinlock) \
+   pipe_mutex_unlock(spinlock)
+
+
 /* TODO: Need a macro to declare "I don't care about WinXP compatibilty" */
 #if 0 && defined (_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
 /* CONDITION_VARIABLE is only available on newer versions of Windows
@@ -272,6 +307,22 @@ typedef unsigned pipe_mutex;
 #define pipe_mutex_unlock(mutex) \
    (void) mutex
 
+
+typedef unsigned pipe_spinlock;
+
+#define pipe_spin_init(spinlock) \
+   (void) spinlock
+
+#define pipe_spin_destroy(spinlock) \
+   (void) spinlock
+
+#define pipe_spin_lock(spinlock) \
+   (void) spinlock
+
+#define pipe_spin_unlock(spinlock) \
+   (void) spinlock
+
+
 typedef int64_t pipe_condvar;
 
 #define pipe_static_condvar(condvar) \
-- 
1.7.1



More information about the mesa-dev mailing list