Underflow is what you really want to trap. When you reach urcu_ref_get, it is already too late.
Signed-off-by: Paolo Bonzini <[email protected]> --- urcu/urcu_ref.h | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/urcu/urcu_ref.h b/urcu/urcu_ref.h index bce7116..06b81b9 100644 --- a/urcu/urcu_ref.h +++ b/urcu/urcu_ref.h @@ -33,14 +33,15 @@ static inline void urcu_ref_init(struct urcu_ref *ref) static inline void urcu_ref_get(struct urcu_ref *ref) { - long res = uatomic_add_return(&ref->refcount, 1); - assert(res != 0); + uatomic_add(&ref->refcount, 1); } static inline void urcu_ref_put(struct urcu_ref *ref, void (*release)(struct urcu_ref *)) { - if (!uatomic_sub_return(&ref->refcount, 1)) + long res = uatomic_sub_return(&ref->refcount, 1); + assert (res >= 0); + if (res == 0) release(ref); } -- 1.7.4.4 _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
