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]

Reply via email to