aboutsummaryrefslogtreecommitdiffstats
path: root/main/alsa-utils/alsa-utils_portable-mutex.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/alsa-utils/alsa-utils_portable-mutex.patch')
-rw-r--r--main/alsa-utils/alsa-utils_portable-mutex.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/main/alsa-utils/alsa-utils_portable-mutex.patch b/main/alsa-utils/alsa-utils_portable-mutex.patch
new file mode 100644
index 0000000000..5def7830d7
--- /dev/null
+++ b/main/alsa-utils/alsa-utils_portable-mutex.patch
@@ -0,0 +1,27 @@
+--- alsa-utils-1.0.27.2.org/alsaloop/pcmjob.c
++++ alsa-utils-1.0.27.2/alsaloop/pcmjob.c
+@@ -62,11 +62,22 @@
+ };
+ #endif
+
+-static pthread_mutex_t pcm_open_mutex =
+- PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
++static pthread_once_t pcm_open_mutex_once = PTHREAD_ONCE_INIT;
++static pthread_mutex_t pcm_open_mutex;
+
++static void pcm_open_init_mutex(void)
++{
++ pthread_mutexattr_t attr;
++
++ pthread_mutexattr_init(&attr);
++ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
++ pthread_mutex_init(&pcm_open_mutex, &attr);
++ pthread_mutexattr_destroy(&attr);
++}
++
+ static inline void pcm_open_lock(void)
+ {
++ pthread_once(&pcm_open_mutex_once, pcm_open_init_mutex);
+ if (workarounds & WORKAROUND_SERIALOPEN)
+ pthread_mutex_lock(&pcm_open_mutex);
+ }