typedef void (*bt_object_release_func)(struct bt_object *);
struct bt_ref {
- long count;
+ unsigned long count;
bt_object_release_func release;
};
void bt_ref_get(struct bt_ref *ref)
{
assert(ref);
+
+ if (!ref->release) {
+ return;
+ }
+
ref->count++;
+ /* Overflow check. */
+ assert(ref->count);
}
static inline
{
assert(ref);
/* Only assert if the object has opted-in for reference counting. */
- assert(!ref->release || ref->count > 0);
if ((--ref->count) == 0 && ref->release) {
ref->release((struct bt_object *) ref);
}