]> git.ozlabs.org Git - ccan/blobdiff - ccan/tal/tal.h
tal: add del_destructor().
[ccan] / ccan / tal / tal.h
index 1ed15c75f46fd664b6f57b10c65bcd8eb9790406..7efc824ab9da37b806f159d7107caf57bef66c18 100644 (file)
@@ -53,14 +53,15 @@ typedef void tal_t;
  * @p: NULL, or tal allocated object to free.
  *
  * This calls the destructors for p (if any), then does the same for all its
- * children (recursively) before finally freeing the memory.
+ * children (recursively) before finally freeing the memory.  It returns
+ * NULL, for convenience.
  *
  * Note: errno is preserved by this call.
  *
  * Example:
- *     tal_free(p);
+ *     p = tal_free(p);
  */
-void tal_free(const tal_t *p);
+void *tal_free(const tal_t *p);
 
 /**
  * tal_arr - allocate an array of objects.
@@ -129,6 +130,17 @@ void tal_free(const tal_t *p);
 #define tal_add_destructor(ptr, function)                                    \
        tal_add_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr)))
 
+/**
+ * tal_del_destructor - remove a destructor callback function.
+ * @ptr: The tal allocated object.
+ * @function: the function to call before it's freed.
+ *
+ * If @function has not been successfully added as a destructor, this returns
+ * false.
+ */
+#define tal_del_destructor(ptr, function)                                    \
+       tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr)))
+
 /**
  * tal_set_name - attach a name to a tal pointer.
  * @ptr: The tal allocated object.
@@ -323,5 +335,6 @@ tal_t *tal_steal_(const tal_t *new_parent, const tal_t *t);
 bool tal_resize_(tal_t **ctxp, size_t size);
 
 bool tal_add_destructor_(tal_t *ctx, void (*destroy)(void *me));
+bool tal_del_destructor_(tal_t *ctx, void (*destroy)(void *me));
 
 #endif /* CCAN_TAL_H */