+/**
+ * talloc_add_external - create an externally allocated node
+ * @ctx: the parent
+ * @realloc: the realloc() equivalent
+ *
+ * talloc_add_external() creates a node which uses a separate allocator. All
+ * children allocated from that node will also use that allocator.
+ *
+ * Note: Currently there is only one external allocator, not per-node,
+ * and it is set with this function.
+ *
+ * The parent pointers in realloc is the talloc pointer of the parent, if any.
+ */
+void *talloc_add_external(const void *ctx,
+ void *(*realloc)(const void *parent,
+ void *ptr, size_t));
+
+/**
+ * talloc_locksafe - set locking for talloc on shared memory
+ * @lock: function to use to lock memory
+ * @unlock: function to use to unlock memory
+ * @data: pointer to hand to @lock and @unlock
+ *
+ * If talloc is actually dealing with shared memory (threads or shared
+ * memory using talloc_add_external()) then locking is required on
+ * allocation and free to avoid corruption.
+ *
+ * These hooks allow a very course-grained locking scheme: @lock is
+ * called before any internal alloc or free, and @unlock is called
+ * after. */
+#define talloc_locksafe(lock, unlock, data) \
+ _talloc_locksafe(typesafe_cb(void, lock, data), \
+ typesafe_cb(void, unlock, data), \
+ data)
+