diff options
Diffstat (limited to 'src/pulsecore/mutex-posix.c')
-rw-r--r-- | src/pulsecore/mutex-posix.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/pulsecore/mutex-posix.c b/src/pulsecore/mutex-posix.c index 805f11de..35465b7b 100644 --- a/src/pulsecore/mutex-posix.c +++ b/src/pulsecore/mutex-posix.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of PulseAudio. @@ -49,7 +47,7 @@ pa_mutex* pa_mutex_new(pa_bool_t recursive, pa_bool_t inherit_priority) { int r; pa_assert_se(pthread_mutexattr_init(&attr) == 0); - + if (recursive) pa_assert_se(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) == 0); @@ -60,9 +58,9 @@ pa_mutex* pa_mutex_new(pa_bool_t recursive, pa_bool_t inherit_priority) { m = pa_xnew(pa_mutex, 1); -#ifndef HAVE_PTHREAD_PRIO_INHERIT +#ifndef HAVE_PTHREAD_PRIO_INHERIT pa_assert_se(pthread_mutex_init(&m->mutex, &attr) == 0); - + #else if ((r = pthread_mutex_init(&m->mutex, &attr))) { @@ -74,8 +72,8 @@ pa_mutex* pa_mutex_new(pa_bool_t recursive, pa_bool_t inherit_priority) { pa_assert_se(pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_NONE) == 0); pa_assert_se(pthread_mutex_init(&m->mutex, &attr) == 0); } -#endif - +#endif + return m; } @@ -92,6 +90,18 @@ 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) { + int r; + pa_assert(m); + + if ((r = pthread_mutex_trylock(&m->mutex)) != 0) { + pa_assert(r == EBUSY); + return FALSE; + } + + return TRUE; +} + void pa_mutex_unlock(pa_mutex *m) { pa_assert(m); |