|
@@ -29,39 +29,36 @@
|
|
|
|
|
|
#ifdef HAVE_LOCKS
|
|
|
|
|
|
-#include <pthread.h>
|
|
|
+/** Enumeration of lock states */
|
|
|
+typedef enum locktype_en {STATE_LOCKED, STATE_UNLOCKED} locktype_t;
|
|
|
|
|
|
-/** Locks the systemallocator object */
|
|
|
-#define LOCK_GLOBAL() pthread_mutex_lock(&tls_allocator->creation_mutex)
|
|
|
-/** Unlocks the systemallocator object */
|
|
|
-#define UNLOCK_GLOBAL() pthread_mutex_unlock(&tls_allocator->creation_mutex)
|
|
|
-/** Locks a specific raw block */
|
|
|
-#define LOCK_RAW_BLOCK(rb) pthread_mutex_lock(&rb->mutex)
|
|
|
-/** Tries to lock a specific raw block */
|
|
|
-#define TRYLOCK_RAW_BLOCK(rb) pthread_mutex_trylock(&rb->mutex)
|
|
|
-/** Initializes a raw block lock */
|
|
|
-#define INIT_RAW_BLOCK_LOCK(rb) pthread_mutex_init(&rb->mutex, NULL);
|
|
|
-/** Destroys a raw block lock */
|
|
|
-#define DESTROY_RAW_BLOCK_LOCK(rb) pthread_mutex_destroy(&rb->mutex);
|
|
|
-/** Unlocks a specific raw block */
|
|
|
-#define UNLOCK_RAW_BLOCK(rb) pthread_mutex_unlock(&rb->mutex)
|
|
|
+/** Initializes a locktype_t variable */
|
|
|
+#define INIT_DEALY_LOCK(lock) lock = STATE_UNLOCKED
|
|
|
+/** Locks a locktype_t variable */
|
|
|
+#define DEALY_LOCK(lock) \
|
|
|
+ while(__sync_bool_compare_and_swap(&lock, \
|
|
|
+ STATE_UNLOCKED, STATE_LOCKED) != STATE_UNLOCKED){}
|
|
|
+/** Tries to lock a locktype_t variable */
|
|
|
+#define DEALY_TRYLOCK(lock) \
|
|
|
+ ((__sync_bool_compare_and_swap(&lock, STATE_UNLOCKED, STATE_LOCKED) != \
|
|
|
+ STATE_UNLOCKED))
|
|
|
+/** Unlocks a locktype_t variable */
|
|
|
+#define DEALY_UNLOCK(lock) lock = STATE_UNLOCKED
|
|
|
+/** Destroys a locktype_t */
|
|
|
+#define DEALY_DESTROY_LOCK(lock) lock = STATE_UNLOCKED
|
|
|
|
|
|
#else /* HAVE_LOCKS */
|
|
|
|
|
|
/** Does nothing. */
|
|
|
-#define LOCK_GLOBAL()
|
|
|
+#define INIT_DEALY_LOCK()
|
|
|
/** Does nothing. */
|
|
|
-#define UNLOCK_GLOBAL()
|
|
|
+#define DEALY_LOCK()
|
|
|
/** Does nothing. */
|
|
|
-#define LOCK_RAW_BLOCK(RB)
|
|
|
+#define DEALY_TRYLOCK(lock)
|
|
|
/** Does nothing. */
|
|
|
-#define TRYLOCK_RAW_BLOCK(RB)
|
|
|
+#define DEALY_UNLOCK(lock)
|
|
|
/** Does nothing. */
|
|
|
-#define INIT_RAW_BLOCK_LOCK(RB)
|
|
|
-/** Does nothing. */
|
|
|
-#define DESTROY_RAW_BLOCK_LOCK(RB)
|
|
|
-/** Does nothing. */
|
|
|
-#define UNLOCK_RAW_BLOCK(RB)
|
|
|
+#define DEALY_DESTROY_LOCK(lock)
|
|
|
|
|
|
#endif /* HAVE_LOCKS */
|
|
|
|