From c1b4872b0910c9aa784d878dca771b21c4690048 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 22 May 2007 22:53:09 +0000 Subject: lots of work git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@30 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce --- mutex.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'mutex.c') diff --git a/mutex.c b/mutex.c index 8674fff..12a4f4a 100644 --- a/mutex.c +++ b/mutex.c @@ -2,8 +2,8 @@ #include #endif -#include #include +#include #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); } -- cgit