]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/mutex-posix.c
remap: Change remapping function argument type from void to int16_t / float as approp...
[pulseaudio] / src / pulsecore / mutex-posix.c
index b3e5256a30ec4ad8292470f9c347e0707bc17b09..36c2787b6c99828dca76a605090244112f8d4fa8 100644 (file)
@@ -28,8 +28,6 @@
 
 #include <pulse/xmalloc.h>
 #include <pulsecore/macro.h>
-#include <pulsecore/log.h>
-#include <pulsecore/core-error.h>
 
 #include "mutex.h"
 
@@ -41,10 +39,12 @@ struct pa_cond {
     pthread_cond_t cond;
 };
 
-pa_mutex* pa_mutex_new(pa_bool_t recursive, pa_bool_t inherit_priority) {
+pa_mutex* pa_mutex_new(bool recursive, bool inherit_priority) {
     pa_mutex *m;
     pthread_mutexattr_t attr;
+#ifdef HAVE_PTHREAD_PRIO_INHERIT
     int r;
+#endif
 
     pa_assert_se(pthread_mutexattr_init(&attr) == 0);
 
@@ -52,8 +52,10 @@ pa_mutex* pa_mutex_new(pa_bool_t recursive, pa_bool_t inherit_priority) {
         pa_assert_se(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) == 0);
 
 #ifdef HAVE_PTHREAD_PRIO_INHERIT
-    if (inherit_priority)
-        pa_assert_se(pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT) == 0);
+    if (inherit_priority) {
+        r = pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT);
+        pa_assert(r == 0 || r == ENOTSUP);
+    }
 #endif
 
     m = pa_xnew(pa_mutex, 1);
@@ -90,16 +92,16 @@ void pa_mutex_lock(pa_mutex *m) {
     pa_assert_se(pthread_mutex_lock(&m->mutex) == 0);
 }
 
-pa_bool_t pa_mutex_try_lock(pa_mutex *m) {
+bool pa_mutex_try_lock(pa_mutex *m) {
     int r;
     pa_assert(m);
 
     if ((r = pthread_mutex_trylock(&m->mutex)) != 0) {
         pa_assert(r == EBUSY);
-        return FALSE;
+        return false;
     }
 
-    return TRUE;
+    return true;
 }
 
 void pa_mutex_unlock(pa_mutex *m) {
@@ -139,7 +141,7 @@ int pa_cond_wait(pa_cond *c, pa_mutex *m) {
     return pthread_cond_wait(&c->cond, &m->mutex);
 }
 
-pa_mutex* pa_static_mutex_get(pa_static_mutex *s, pa_bool_t recursive, pa_bool_t inherit_priority) {
+pa_mutex* pa_static_mutex_get(pa_static_mutex *s, bool recursive, bool inherit_priority) {
     pa_mutex *m;
 
     pa_assert(s);
@@ -153,6 +155,8 @@ pa_mutex* pa_static_mutex_get(pa_static_mutex *s, pa_bool_t recursive, pa_bool_t
     if ((pa_atomic_ptr_cmpxchg(&s->ptr, NULL, m)))
         return m;
 
+    pa_mutex_free(m);
+
     /* Him, filling in failed, so someone else must have filled in
      * already */
     pa_assert_se(m = pa_atomic_ptr_load(&s->ptr));