From e15f834a916d64b80a0da9cdc4ee0bd4439b6bf4 Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sun, 6 Dec 2009 13:41:37 -0800 Subject: Circular references truly work now, along with a test. One simplification to come. --- src/upb_atomic.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/upb_atomic.h') diff --git a/src/upb_atomic.h b/src/upb_atomic.h index 22aa306..e425502 100644 --- a/src/upb_atomic.h +++ b/src/upb_atomic.h @@ -55,7 +55,8 @@ INLINE int upb_atomic_read(upb_atomic_refcount_t *a) { } INLINE bool upb_atomic_add(upb_atomic_refcount_t *a, int val) { - return a->val += val; + a->val += val; + return a->val == 0; } typedef struct { @@ -93,7 +94,7 @@ INLINE bool upb_atomic_ref(upb_atomic_refcount_t *a) { } INLINE bool upb_atomic_add(upb_atomic_refcount_t *a, int n) { - return __sync_fetch_and_add(&a->val, n) == 0; + return __sync_add_and_fetch(&a->val, n) == 0; } INLINE bool upb_atomic_unref(upb_atomic_refcount_t *a) { -- cgit v1.2.3