summaryrefslogtreecommitdiff
path: root/source3/lib/talloc_stack.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2008-01-11 22:38:42 -0800
committerJeremy Allison <jra@samba.org>2008-01-11 22:38:42 -0800
commit05fb367a014305f385a6db6653bd327861291563 (patch)
tree0c0613cccf22ed0cc92498ee0371b95db01f5c8c /source3/lib/talloc_stack.c
parent1d1b996f3879b87418bdde2fd1691ae2cca42cd4 (diff)
parent45db92cc72eb2472425c17e72ff9254d35d8047c (diff)
downloadsamba-05fb367a014305f385a6db6653bd327861291563.tar.gz
samba-05fb367a014305f385a6db6653bd327861291563.tar.bz2
samba-05fb367a014305f385a6db6653bd327861291563.zip
Merge branch 'v3-2-test' of ssh://jra@git.samba.org/data/git/samba into v3-2-test
(This used to be commit 08645826817d42c9d4b42ea0fd5e633d7fd08d35)
Diffstat (limited to 'source3/lib/talloc_stack.c')
-rw-r--r--source3/lib/talloc_stack.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/source3/lib/talloc_stack.c b/source3/lib/talloc_stack.c
index d887b2d415..2722fb9676 100644
--- a/source3/lib/talloc_stack.c
+++ b/source3/lib/talloc_stack.c
@@ -64,9 +64,9 @@ static int talloc_pop(TALLOC_CTX *frame)
* not explicitly freed.
*/
-TALLOC_CTX *talloc_stackframe(void)
+static TALLOC_CTX *talloc_stackframe_internal(size_t poolsize)
{
- TALLOC_CTX **tmp, *top;
+ TALLOC_CTX **tmp, *top, *parent;
if (talloc_stack_arraysize < talloc_stacksize + 1) {
tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *,
@@ -78,7 +78,18 @@ TALLOC_CTX *talloc_stackframe(void)
talloc_stack_arraysize = talloc_stacksize + 1;
}
- top = talloc_new(talloc_stack);
+ if (talloc_stacksize == 0) {
+ parent = talloc_stack;
+ }
+ else {
+ parent = talloc_stack[talloc_stacksize-1];
+ }
+
+ if (poolsize) {
+ top = talloc_pool(parent, poolsize);
+ } else {
+ top = talloc_new(parent);
+ }
if (top == NULL) {
goto fail;
@@ -94,6 +105,16 @@ TALLOC_CTX *talloc_stackframe(void)
return NULL;
}
+TALLOC_CTX *talloc_stackframe(void)
+{
+ return talloc_stackframe_internal(0);
+}
+
+TALLOC_CTX *talloc_stackframe_pool(size_t poolsize)
+{
+ return talloc_stackframe_internal(poolsize);
+}
+
/*
* Get us the current top of the talloc stack.
*/