From mboxrd@z Thu Jan 1 00:00:00 1970 From: compudj@krystal.dyndns.org (Mathieu Desnoyers) Date: Thu, 9 Jun 2011 10:14:51 -0400 Subject: [ltt-dev] [PATCH] urcu_ref: do error checking on urcu_ref_put In-Reply-To: <1307627865-31969-2-git-send-email-pbonzini@redhat.com> References: <1307627865-31969-2-git-send-email-pbonzini@redhat.com> Message-ID: * Paolo Bonzini (pbonzini at redhat.com) wrote: > Underflow is what you really want to trap. When you reach urcu_ref_get, it > is already too late. Merged, thanks! Mathieu > > 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 > > > > _______________________________________________ > ltt-dev mailing list > ltt-dev at lists.casi.polymtl.ca > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev > -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com