TODO: talloc: talloc_free() should remove the reference to the current owner
authorStefan Metzmacher <metze@samba.org>
Mon, 2 Feb 2009 12:12:07 +0000 (12:12 +0000)
committerStefan Metzmacher <metze@samba.org>
Thu, 9 Jul 2009 08:35:48 +0000 (10:35 +0200)
TODO: talloc: talloc_free() should remove the reference to the current owner

The parent of the first reference becomes the owner...

metze

Signed-off-by: Sam Liddicott <sam@liddicott.com>
lib/talloc/talloc.c

index 33cbfd7d268dc737e95948c44575ac6c53d835d7..1a316d6d58ded63c0af672ae80a9784db95d9554 100644 (file)
@@ -510,9 +510,13 @@ static inline int _talloc_free(void *ptr)
                 * pointer.
                 */
                is_child = talloc_is_parent(tc->refs, ptr);
-               _talloc_free(tc->refs);
                if (is_child) {
+                       _talloc_free(tc->refs);
                        return _talloc_free(ptr);
+               } else {
+                       /* the first reference becomes the owner */
+                       _talloc_steal(talloc_parent(tc->refs), ptr);
+                       _talloc_free(tc->refs);
                }
                return -1;
        }