X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fobject-internal.h;fp=include%2Fbabeltrace%2Fobject-internal.h;h=00f48ef675e6bdd3cb0b4ebca47ca85c6a1ddc95;hb=c5b9b4417bedfbec9b5dd23b8395ccdd4eeffc44;hp=1420d9fedea298fc8c98a79f755baf955609afcd;hpb=e2f7325d1e58710ee928373592adcee466f93d06;p=babeltrace.git diff --git a/include/babeltrace/object-internal.h b/include/babeltrace/object-internal.h index 1420d9fe..00f48ef6 100644 --- a/include/babeltrace/object-internal.h +++ b/include/babeltrace/object-internal.h @@ -324,4 +324,51 @@ void bt_object_put_no_null_check(const void *c_obj) } } +static inline +void bt_object_get_ref(const void *ptr) +{ + struct bt_object *obj = (void *) ptr; + + if (unlikely(!obj)) { + return; + } + +#ifdef BT_ASSERT_PRE + BT_ASSERT_PRE(obj->is_shared, "Object is not shared: %!+O", obj); +#endif + + bt_object_get_no_null_check(obj); +} + +static inline +void bt_object_put_ref(const void *ptr) +{ + struct bt_object *obj = (void *) ptr; + + if (unlikely(!obj)) { + return; + } + +#ifdef BT_ASSERT_PRE + BT_ASSERT_PRE(obj->is_shared, "Object is not shared: %!+O", obj); + BT_ASSERT_PRE(bt_object_get_ref_count(obj) > 0, + "Decrementing a reference count set to 0: %!+O", ptr); +#endif + + bt_object_put_no_null_check(obj); +} + +#define BT_OBJECT_PUT_REF_AND_RESET(_var) \ + do { \ + bt_object_put_ref(_var); \ + (_var) = NULL; \ + } while (0) + +#define BT_OBJECT_MOVE_REF(_var_dst, _var_src) \ + do { \ + bt_object_put_ref(_var_dst); \ + (_var_dst) = (_var_src); \ + (_var_src) = NULL; \ + } while (0) + #endif /* BABELTRACE_OBJECT_INTERNAL_H */