diff options
Diffstat (limited to 'mutex.c')
-rw-r--r-- | mutex.c | 27 |
1 files changed, 19 insertions, 8 deletions
@@ -2,8 +2,8 @@ #include <config.h> #endif -#include <assert.h> #include <pthread.h> +#include <errno.h> #include "macro.h" #include "malloc.h" @@ -34,20 +34,31 @@ sa_mutex_t* sa_mutex_new(int recursive) { } void sa_mutex_free(sa_mutex_t *m) { - assert(m); + sa_assert(m); sa_assert_success(pthread_mutex_destroy(&m->mutex)); sa_free(m); } void sa_mutex_lock(sa_mutex_t *m) { - assert(m); + sa_assert(m); sa_assert_success(pthread_mutex_lock(&m->mutex)); } +int sa_mutex_try_lock(sa_mutex_t *m) { + int e; + sa_assert(m); + + if ((e = pthread_mutex_trylock(&m->mutex)) == 0) + return 1; + + sa_assert(e == EBUSY); + return 0; +} + void sa_mutex_unlock(sa_mutex_t *m) { - assert(m); + sa_assert(m); sa_assert_success(pthread_mutex_unlock(&m->mutex)); } @@ -63,14 +74,14 @@ sa_cond_t *sa_cond_new(void) { } void sa_cond_free(sa_cond_t *c) { - assert(c); + sa_assert(c); sa_assert_success(pthread_cond_destroy(&c->cond)); sa_free(c); } void sa_cond_signal(sa_cond_t *c, int broadcast) { - assert(c); + sa_assert(c); if (broadcast) sa_assert_success(pthread_cond_broadcast(&c->cond)); @@ -79,8 +90,8 @@ void sa_cond_signal(sa_cond_t *c, int broadcast) { } int sa_cond_wait(sa_cond_t *c, sa_mutex_t *m) { - assert(c); - assert(m); + sa_assert(c); + sa_assert(m); return pthread_cond_wait(&c->cond, &m->mutex); } |