From: Francis Deslauriers Date: Wed, 8 Mar 2017 16:50:38 +0000 (-0500) Subject: Fix: atomic_add_unless() returns true/false rather than prior value X-Git-Tag: v2.9.2~4 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=42e537c5128eb07e080029134e29c8e3a0c98243;p=lttng-modules.git Fix: atomic_add_unless() returns true/false rather than prior value The previous implementation assumed that `atomic_add_unless` returned the prior value of the atomic counter when in fact it returned if the addition was performed (true) or not performed (false). Since `atomic_add_unless` can not return INT_MAX, the `lttng_kref_get` always returned that the call was successful. This issue had a low likelihood of being triggered since the two refcounts of the counters used with this call are both bounded by the maximum number of file descriptors on the system. Signed-off-by: Francis Deslauriers Signed-off-by: Mathieu Desnoyers --- diff --git a/wrapper/kref.h b/wrapper/kref.h index eedefbfe..f30a9aed 100644 --- a/wrapper/kref.h +++ b/wrapper/kref.h @@ -36,11 +36,7 @@ */ static inline int lttng_kref_get(struct kref *kref) { - if (atomic_add_unless(&kref->refcount, 1, INT_MAX) != INT_MAX) { - return 1; - } else { - return 0; - } + return atomic_add_unless(&kref->refcount, 1, INT_MAX); } #endif /* _LTTNG_WRAPPER_KREF_H */