From ba29d58a4a26a1b4c7a6ef35bc609f64dd8725f5 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Fri, 26 Nov 2010 08:57:54 -0800 Subject: [PATCH] use inline function since macros is horrible with returning values in statements --- base/baselocl.h | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/base/baselocl.h b/base/baselocl.h index 6e2a17780..0fa2c7d44 100644 --- a/base/baselocl.h +++ b/base/baselocl.h @@ -74,11 +74,31 @@ #else -#warning "provide atomic integer operations for your compiler" +#define HEIM_BASE_NEED_ATOMIC_MUTEX 1 +extern HEIMDAL_MUTEX _heim_base_mutex; -#define heim_base_atomic_inc(x) ((x)++) -#define heim_base_atomic_dec(x) ((x)--) #define heim_base_atomic_type unsigned int + +static inline heim_base_atomic_type +heim_base_atomic_inc(heim_base_atomic_type *x) +{ + heim_base_atomic_type t; + HEIMDAL_MUTEX_lock(&_heim_base_mutex); + t = ++(*x); + HEIMDAL_MUTEX_unlock(&_heim_base_mutex); + return t; +} + +static inline heim_base_atomic_type +heim_base_atomic_dec(heim_base_atomic_type *x) +{ + heim_base_atomic_type t; + HEIMDAL_MUTEX_lock(&_heim_base_mutex); + t = --(*x); + HEIMDAL_MUTEX_unlock(&_heim_base_mutex); + return t; +} + #define heim_base_atomic_max UINT_MAX #endif