aboutsummaryrefslogtreecommitdiff
path: root/src/common.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-08-18 20:57:03 +0100
committergingerBill <bill@gingerbill.org>2021-08-18 20:57:03 +0100
commitaa5c3da4149ab37f5641b06f76f430568ce88144 (patch)
tree35f893f07e3b464e1a8d592d818612347aca4ece /src/common.cpp
parentd419d81841aafca0562c01ef2624b1340c33397b (diff)
Make `BlockingMutex` non-recursive on *nix systems
Diffstat (limited to 'src/common.cpp')
-rw-r--r--src/common.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/common.cpp b/src/common.cpp
index 81afe2bef..d02fd9371 100644
--- a/src/common.cpp
+++ b/src/common.cpp
@@ -48,21 +48,25 @@
ReleaseSRWLockExclusive(&m->srwlock);
}
#else
- typedef gbMutex BlockingMutex;
+ struct BlockingMutex {
+ pthread_mutex_t pthread_mutex;
+ pthread_mutexattr_t pthread_mutexattr;
+ };
void mutex_init(BlockingMutex *m) {
- gb_mutex_init(m);
+ pthread_mutexattr_init(&m->pthread_mutexattr);
+ pthread_mutex_init(&m->pthread_mutex, &m->pthread_mutexattr);
}
void mutex_destroy(BlockingMutex *m) {
- gb_mutex_destroy(m);
+ pthread_mutex_destroy(&m->pthread_mutex);
}
void mutex_lock(BlockingMutex *m) {
- gb_mutex_lock(m);
+ pthread_mutex_lock(&m->pthread_mutex);
}
bool mutex_try_lock(BlockingMutex *m) {
- return !!gb_mutex_try_lock(m);
+ return pthread_mutex_trylock(&m->pthread_mutex) == 0;
}
void mutex_unlock(BlockingMutex *m) {
- gb_mutex_unlock(m);
+ pthread_mutex_unlock(&m->pthread_mutex);
}
#endif