#define rx_atomic_read(X) atomic_read(X)
#define rx_atomic_inc(X) atomic_inc(X)
#define rx_atomic_inc_and_read(X) atomic_inc_return(X)
-#define rx_atomic_add(X, V) atomic_add(X, V)
+#define rx_atomic_add(X, V) atomic_add(V, X)
#define rx_atomic_dec(X) atomic_dec(X)
-#define rx_atomic_sub(X, V) atomic_sub(X, V)
+#define rx_atomic_sub(X, V) atomic_sub(V, X)
#elif defined(AFS_SUN58_ENV)
+
+# include <atomic.h>
+
typedef struct {
- volatile int var;
+ volatile unsigned int var;
} rx_atomic_t;
static_inline void
static_inline void
rx_atomic_sub(rx_atomic_t *atomic, int change) {
- atomic_add_32(&object, 0 - change);
+ atomic_add_32(&atomic->var, 0 - change);
}
#elif defined(__GNUC__) && defined(HAVE_SYNC_FETCH_AND_ADD)
rx_atomic_sub(rx_atomic_t *atomic, int change) {
MUTEX_ENTER(&rx_atomic_mutex);
atomic->var -= change;
- MUTEX_ENTER(&rx_atomic_mutex);
+ MUTEX_EXIT(&rx_atomic_mutex);
}
#endif