]> git.sesse.net Git - vlc/commitdiff
vlc_global_mutex: common functions for process-wide mutexes
authorRémi Denis-Courmont <remi@remlab.net>
Thu, 3 Jun 2010 20:25:31 +0000 (23:25 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 3 Jun 2010 20:55:45 +0000 (23:55 +0300)
include/vlc_threads.h
src/libvlccore.sym
src/misc/threads.c

index e9d1c8da453c82dacac5f9b157df3d76f78fd757..5d9ab65cb2456877a92f7486f3e0ba88e58cb3b9 100644 (file)
@@ -442,4 +442,14 @@ class vlc_mutex_locker
 };
 #endif
 
+enum {
+   VLC_AVCODEC_MUTEX = 0,
+   VLC_GCRYPT_MUTEX,
+   VLC_MAX_MUTEX
+};
+
+VLC_EXPORT( void, vlc_global_mutex, ( unsigned, bool ) );
+#define vlc_global_lock( n ) vlc_global_mutex( n, true )
+#define vlc_global_unlock( n ) vlc_global_mutex( n, false )
+
 #endif /* !_VLC_THREADS_H */
index d8cd222309cc25dc3e447ca42584a42326bc5a03..bb3ad12710834d78b456b2b08b61f62dd1f79c36 100644 (file)
@@ -551,6 +551,7 @@ vlc_mutex_init_recursive
 vlc_mutex_lock
 vlc_mutex_trylock
 vlc_mutex_unlock
+vlc_global_mutex
 vlc_object_attach
 vlc_object_create
 vlc_object_find
index 5099041ef18d7948b558ffdeddfb94d6cadc73f6..ba93c1bb275af8309116bfc3c61df5d0acd22c02 100644 (file)
@@ -233,3 +233,24 @@ void vlc_thread_cancel (vlc_object_t *obj)
     if (priv->b_thread)
         vlc_cancel (priv->thread_id);
 }
+
+/*** Global locks ***/
+
+void vlc_global_mutex (unsigned n, bool acquire)
+{
+    static vlc_mutex_t locks[] = {
+        VLC_STATIC_MUTEX,
+        VLC_STATIC_MUTEX,
+    };
+    assert (n < (sizeof (locks) / sizeof (locks[0])));
+    vlc_mutex_t *lock = locks + n;
+
+    if (acquire)
+        vlc_mutex_lock (lock);
+    else
+        vlc_mutex_unlock (lock);
+
+    /* Compile-time assertion ;-) */
+    char enough_locks[(sizeof (locks) / sizeof (locks[0])) - VLC_MAX_MUTEX];
+    (void) enough_locks;
+}