From 988ea4010135a8aba106c9039f2dd46d916cbe58 Mon Sep 17 00:00:00 2001 From: John Sully Date: Sun, 10 Feb 2019 22:00:19 -0500 Subject: [PATCH] Fastlock fixes --- src/fastlock.cpp | 10 +++++++--- src/fastlock.h | 27 +++++++++++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/fastlock.cpp b/src/fastlock.cpp index 6e8f8a286..42741d0a1 100644 --- a/src/fastlock.cpp +++ b/src/fastlock.cpp @@ -1,19 +1,23 @@ #include "fastlock.h" +#include extern "C" void fastlock_init(struct fastlock *lock) { - lock->lock = 0; + lock->m_lock = 0; } extern "C" void fastlock_lock(struct fastlock *lock) { - while (!__sync_bool_compare_and_swap(&lock->lock, 0, 1)); + while (!__sync_bool_compare_and_swap(&lock->m_lock, 0, 1)) + { + } } extern "C" void fastlock_unlock(struct fastlock *lock) { - lock->lock = 0; + __sync_bool_compare_and_swap(&lock->m_lock, 1, 0); } + extern "C" void fastlock_free(struct fastlock *lock) { // NOP diff --git a/src/fastlock.h b/src/fastlock.h index 9ad2457cd..864c86822 100644 --- a/src/fastlock.h +++ b/src/fastlock.h @@ -4,16 +4,31 @@ extern "C" { #endif -struct fastlock -{ - int lock; -}; - +/* Begin C API */ +struct fastlock; void fastlock_init(struct fastlock *lock); void fastlock_lock(struct fastlock *lock); void fastlock_unlock(struct fastlock *lock); void fastlock_free(struct fastlock *lock); +/* End C API */ #ifdef __cplusplus } -#endif \ No newline at end of file +#endif + +struct fastlock +{ + int m_lock; + +#ifdef __cplusplus + void lock() + { + fastlock_lock(this); + } + + void unlock() + { + fastlock_unlock(this); + } +#endif +};