From e3c350269cf1b482d2f6842e5b31a83be27a1c40 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Thu, 3 Jun 2010 23:25:31 +0300 Subject: [PATCH] vlc_global_mutex: common functions for process-wide mutexes --- include/vlc_threads.h | 10 ++++++++++ src/libvlccore.sym | 1 + src/misc/threads.c | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/include/vlc_threads.h b/include/vlc_threads.h index e9d1c8da45..5d9ab65cb2 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -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 */ diff --git a/src/libvlccore.sym b/src/libvlccore.sym index d8cd222309..bb3ad12710 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -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 diff --git a/src/misc/threads.c b/src/misc/threads.c index 5099041ef1..ba93c1bb27 100644 --- a/src/misc/threads.c +++ b/src/misc/threads.c @@ -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; +} -- 2.39.2