From mboxrd@z Thu Jan 1 00:00:00 1970 From: pbonzini@redhat.com (Paolo Bonzini) Date: Thu, 9 Jun 2011 15:57:43 +0200 Subject: [ltt-dev] [PATCH] urcu_ref: do error checking on urcu_ref_put Message-ID: <1307627865-31969-2-git-send-email-pbonzini@redhat.com> Underflow is what you really want to trap. When you reach urcu_ref_get, it is already too late. Signed-off-by: Paolo Bonzini --- 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