talloc_stack: always include the location when creating a talloc_stackframe().
authorRusty Russell <rusty@rustcorp.com.au>
Tue, 17 Jul 2012 19:26:31 +0000 (04:56 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Tue, 17 Jul 2012 19:26:31 +0000 (04:56 +0930)
Much better for debugging.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
lib/util/talloc_stack.c
lib/util/talloc_stack.h

index b837843c84010159a29bfcde8c740ce1699d1095..304ea17d8c44d59906f49b933740adf6b90ac9bf 100644 (file)
@@ -115,7 +115,8 @@ static int talloc_pop(TALLOC_CTX *frame)
  * not explicitly freed.
  */
 
-static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
+static TALLOC_CTX *talloc_stackframe_internal(const char *location,
+                                             size_t poolsize)
 {
        TALLOC_CTX **tmp, *top;
        struct talloc_stackframe *ts =
@@ -151,7 +152,7 @@ static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
        if (top == NULL) {
                goto fail;
        }
-
+       talloc_set_name_const(top, location);
        talloc_set_destructor(top, talloc_pop);
 
        ts->talloc_stack[ts->talloc_stacksize++] = top;
@@ -162,14 +163,14 @@ static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
        return NULL;
 }
 
-TALLOC_CTX *talloc_stackframe(void)
+TALLOC_CTX *_talloc_stackframe(const char *location)
 {
-       return talloc_stackframe_internal(0);
+       return talloc_stackframe_internal(location, 0);
 }
 
-TALLOC_CTX *talloc_stackframe_pool(size_t poolsize)
+TALLOC_CTX *_talloc_stackframe_pool(const char *location, size_t poolsize)
 {
-       return talloc_stackframe_internal(poolsize);
+       return talloc_stackframe_internal(location, poolsize);
 }
 
 /*
index ec0c1c6f37e951d77c9498f34a21b6522e455c24..8e1644624ba49f1003e397cb0683024bc91559a9 100644 (file)
  * not explicitly freed.
  */
 
-TALLOC_CTX *talloc_stackframe(void);
-TALLOC_CTX *talloc_stackframe_pool(size_t poolsize);
+#define talloc_stackframe() _talloc_stackframe(__location__)
+#define talloc_stackframe_pool(sz) _talloc_stackframe_pool(__location__, (sz))
+TALLOC_CTX *_talloc_stackframe(const char *location);
+TALLOC_CTX *_talloc_stackframe_pool(const char *location, size_t poolsize);
 
 /*
  * Get us the current top of the talloc stack.