mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-03 01:07:56 +00:00
Make BlockingMutex non-recursive on *nix systems
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user