diff options
| author | gingerBill <bill@gingerbill.org> | 2021-08-18 20:57:03 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-08-18 20:57:03 +0100 |
| commit | aa5c3da4149ab37f5641b06f76f430568ce88144 (patch) | |
| tree | 35f893f07e3b464e1a8d592d818612347aca4ece /src/common.cpp | |
| parent | d419d81841aafca0562c01ef2624b1340c33397b (diff) | |
Make `BlockingMutex` non-recursive on *nix systems
Diffstat (limited to 'src/common.cpp')
| -rw-r--r-- | src/common.cpp | 16 |
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 |