From aa5c3da4149ab37f5641b06f76f430568ce88144 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 18 Aug 2021 20:57:03 +0100 Subject: Make `BlockingMutex` non-recursive on *nix systems --- src/common.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/common.cpp') 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 -- cgit v1.2.3