Make BlockingMutex non-recursive on *nix systems

This commit is contained in:
gingerBill
2021-08-18 20:57:03 +01:00
parent d419d81841
commit aa5c3da414

View File

@@ -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