Repository: qpid-dispatch Updated Branches: refs/heads/master 0db8d0837 -> d8045ca93
DISPATCH-624 - Added atomics for Solaris. This closes #152 Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/d8045ca9 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/d8045ca9 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/d8045ca9 Branch: refs/heads/master Commit: d8045ca93fd6776d0b1d6b2d806328d775fc3238 Parents: 0db8d08 Author: Ted Ross <[email protected]> Authored: Fri Mar 24 09:24:39 2017 -0400 Committer: Ted Ross <[email protected]> Committed: Fri Mar 24 09:24:39 2017 -0400 ---------------------------------------------------------------------- include/qpid/dispatch/atomic.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/d8045ca9/include/qpid/dispatch/atomic.h ---------------------------------------------------------------------- diff --git a/include/qpid/dispatch/atomic.h b/include/qpid/dispatch/atomic.h index 567b722..d72bad2 100644 --- a/include/qpid/dispatch/atomic.h +++ b/include/qpid/dispatch/atomic.h @@ -55,6 +55,7 @@ static inline uint32_t sys_atomic_get(sys_atomic_t *ref) static inline void sys_atomic_destroy(sys_atomic_t *ref) {} + #elif defined(__GNUC__) || defined(__clang__) /****************************************************************************** @@ -85,6 +86,42 @@ static inline uint32_t sys_atomic_get(sys_atomic_t *ref) static inline void sys_atomic_destroy(sys_atomic_t *ref) {} + +#elif defined(__sun) + +/****************************************************************************** + * Solaris specific atomics * + ******************************************************************************/ +#include <atomic.h> + +typedef volatile uint32_t sys_atomic_t; + +static inline void sys_atomic_init(sys_atomic_t *ref, uint32_t value) +{ + *ref = value; +} + +static inline uint32_t sys_atomic_add(sys_atomic_t *ref, uint32_t value) +{ + uint32_t oldValue = *ref; + atomic_add_32(ref, value); + return oldValue; +} + +static inline uint32_t sys_atomic_sub(sys_atomic_t *ref, uint32_t value) +{ + uint32_t oldValue = *ref; + atomic_add_32(ref, -value); + return oldValue; +} + +static inline uint32_t sys_atomic_get(sys_atomic_t *ref) +{ + return *ref; +} + +static inline void sys_atomic_destroy(sys_atomic_t *ref) {} + #else /****************************************************************************** --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
