changes to remove the ambiguity in talloc_free() and talloc_steal()
authorAndrew Tridgell <tridge@samba.org>
Wed, 1 Jul 2009 04:53:01 +0000 (14:53 +1000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 1 Jul 2009 05:15:37 +0000 (15:15 +1000)
commit5fe1d8dc1275e43d96da1297f5fb0d0088a1c3ab
treeca520776101c3ff64fa76d01d088c565ea265d5a
parent6a192020a230ab8e085f32b5559c0fe0d2f5c1a4
changes to remove the ambiguity in talloc_free() and talloc_steal()

These changes follow from the discussions on samba-technical. The
changes are in several parts, and stem from the inherent ambiguity
that was in talloc_free() and talloc_steal() when the pointer that is
being changes has more than one parent, via references.

The changes are:

 1) when you call talloc_free() on a pointer with more than one parent
 the free will fail, and talloc will log an error to stderr like this:

    ERROR: talloc_free with references at some/foo.c:123
   reference at other/bar.c:201
   reference at other/foobar.c:641

 2) Similarly, when you call talloc_steal() on a pointer with more
 than one parent, the steal will fail and talloc will log an error to
 stderr like this:

    ERROR: talloc_steal with references at some/foo.c:123
   reference at other/bar.c:201

 3) A new function talloc_reparent() has been added to change a parent
 in a controlled fashion. You need to supply both the old parent and
 the new parent. It handles the case whether either the old parent was
 a normal parent or a reference

The use of stderr in the logging is ugly (and potentially dangerous),
and will be removed in a future patch. We'll need to add a debug
registration function to talloc.
lib/talloc/talloc.c
lib/talloc/talloc.h