Fix: src.ctf.fs: free ds_file_info when add_ds_file_to_ds_file_group fails
[babeltrace.git] / src / common / macros.h
index 23d4b310d573ab49c0f001d900fef04cf678b307..036b3e012b7fc47b360f63007501d5eea20ffe7d 100644 (file)
 #define BT_HIDDEN __attribute__((visibility("hidden")))
 #endif
 
+/*
+ * Yield `ref`'s value while setting `ref` to NULL.
+ *
+ * This can be used to give a strong reference to a callee:
+ *
+ *   add_foo_to_list(list, BT_MOVE_REF(foo));
+ *
+ * or in a simple assignment:
+ *
+ *   my_struct->foo = BT_MOVE_REF(foo);
+ *
+ * When moving a reference in a function call, the reference is given to the
+ * callee even if that function call fails, so make sure the called function
+ * is written accordingly.
+ */
+
+#define BT_MOVE_REF(ref)               \
+       ({                              \
+               __auto_type _ref = ref; \
+               ref = NULL;             \
+               _ref;                   \
+       })
+
 #endif
This page took 0.023208 seconds and 4 git commands to generate.