]> git.sesse.net Git - vlc/commitdiff
vlc_threads: provide proper implementation of vlc_spinlock or WIN32 (Windows 2000...
authorDamien Fouilleul <damienf@videolan.org>
Tue, 22 Jan 2008 18:34:11 +0000 (18:34 +0000)
committerDamien Fouilleul <damienf@videolan.org>
Tue, 22 Jan 2008 18:34:11 +0000 (18:34 +0000)
include/vlc_threads_funcs.h

index 474a9ebc6058c51cab18733d9b3eb6526e819684..696b39f758c1c5775ea64c9c1e053d28d52d6b80 100644 (file)
@@ -771,7 +771,50 @@ static inline int vlc_spin_destroy (vlc_spinlock_t *spin)
 {
     return pthread_spin_destroy (&spin->spin);
 }
+
+#elif defined( WIN32 )
+
+typedef CRITICAL_SECTION vlc_spinlock_t;
+
+/**
+ * Initializes a spinlock.
+ */
+static inline int vlc_spin_init (vlc_spinlock_t *spin)
+{
+    return !InitializeCriticalSectionAndSpinCount(spin, 4000);
+}
+
+/**
+ * Acquires a spinlock.
+ */
+static inline int vlc_spin_lock (vlc_spinlock_t *spin)
+{
+    EnterCriticalSection(spin);
+    return 0;
+}
+
+/**
+ * Releases a spinlock.
+ */
+static inline int vlc_spin_unlock (vlc_spinlock_t *spin)
+{
+    LeaveCriticalSection(spin);
+    return 0;
+}
+
+/**
+ * Deinitializes a spinlock.
+ */
+static inline int vlc_spin_destroy (vlc_spinlock_t *spin)
+{
+    DeleteCriticalSection(spin);
+    return 0;
+}
+
+
 #else
+
+
 /* Fallback to plain mutexes if spinlocks are not available */
 typedef vlc_mutex_t vlc_spinlock_t;