summaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2012-07-18 04:55:31 +0930
committerRusty Russell <rusty@rustcorp.com.au>2012-07-18 04:55:31 +0930
commit311281c2c550b71ec4d8b2fc7329a1dfe5af82b0 (patch)
tree6b8de062bb35730e4921593bb5171807d15fde8c /lib/util
parent4f331872bc783445c709e5fe4846b8687e274953 (diff)
downloadsamba-311281c2c550b71ec4d8b2fc7329a1dfe5af82b0.tar.gz
talloc_stack: handle more than one talloc_stackframe_pool()
The only reason we make one stackframe parent of the next is so we use our parent's pool. That doesn't make sense if we're a new pool, and wouldn't work anyway. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/talloc_stack.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/util/talloc_stack.c b/lib/util/talloc_stack.c
index 16e9d745d34..b837843c840 100644
--- a/lib/util/talloc_stack.c
+++ b/lib/util/talloc_stack.c
@@ -117,7 +117,7 @@ static int talloc_pop(TALLOC_CTX *frame)
static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
{
- TALLOC_CTX **tmp, *top, *parent;
+ TALLOC_CTX **tmp, *top;
struct talloc_stackframe *ts =
(struct talloc_stackframe *)SMB_THREAD_GET_TLS(global_ts);
@@ -135,15 +135,16 @@ static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
ts->talloc_stack_arraysize = ts->talloc_stacksize + 1;
}
- if (ts->talloc_stacksize == 0) {
- parent = ts->talloc_stack;
- } else {
- parent = ts->talloc_stack[ts->talloc_stacksize-1];
- }
-
if (poolsize) {
- top = talloc_pool(parent, poolsize);
+ top = talloc_pool(ts->talloc_stack, poolsize);
} else {
+ TALLOC_CTX *parent;
+ /* We chain parentage, so if one is a pool we draw from it. */
+ if (ts->talloc_stacksize == 0) {
+ parent = ts->talloc_stack;
+ } else {
+ parent = ts->talloc_stack[ts->talloc_stacksize-1];
+ }
top = talloc_new(parent);
}