summaryrefslogtreecommitdiffstats
path: root/mutex.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-05-22 22:53:09 +0000
committerLennart Poettering <lennart@poettering.net>2007-05-22 22:53:09 +0000
commitc1b4872b0910c9aa784d878dca771b21c4690048 (patch)
tree2ca5aea3f57c1336ab3165b94a385da9db72c00f /mutex.c
parentb60e60dbaeff9311b3e74a6d54bb3bbb2c1f61e3 (diff)
lots of work
git-svn-id: file:///home/lennart/svn/public/libsydney/trunk@30 9ba3c220-e4d3-45a2-8aa3-73fcc9aff6ce
Diffstat (limited to 'mutex.c')
-rw-r--r--mutex.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/mutex.c b/mutex.c
index 8674fff..12a4f4a 100644
--- a/mutex.c
+++ b/mutex.c
@@ -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);
}