summaryrefslogtreecommitdiff
path: root/source3/lib/talloc_stack.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-01-06 17:25:20 +0100
committerVolker Lendecke <vl@samba.org>2008-01-07 21:18:00 +0100
commit8d261ee580f7d589920eb405a68aec04e6cc8e7a (patch)
tree262e45edb403ad4e4eb21c494f1fd73080c1c76a /source3/lib/talloc_stack.c
parentc8abd25d94fba0df62136c33837ddfcdaa459a66 (diff)
downloadsamba-8d261ee580f7d589920eb405a68aec04e6cc8e7a.tar.gz
samba-8d261ee580f7d589920eb405a68aec04e6cc8e7a.tar.bz2
samba-8d261ee580f7d589920eb405a68aec04e6cc8e7a.zip
talloc_stackframe only needs 1 talloc
(This used to be commit c0c2084d40b79e949dab7c68626aa665b9ea1a8e)
Diffstat (limited to 'source3/lib/talloc_stack.c')
-rw-r--r--source3/lib/talloc_stack.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/source3/lib/talloc_stack.c b/source3/lib/talloc_stack.c
index e6e4ed321a..cc7ce3a518 100644
--- a/source3/lib/talloc_stack.c
+++ b/source3/lib/talloc_stack.c
@@ -41,16 +41,18 @@
static int talloc_stacksize;
static TALLOC_CTX **talloc_stack;
-static int talloc_pop(int *ptr)
+static int talloc_pop(TALLOC_CTX *frame)
{
- int tos = *ptr;
int i;
- for (i=talloc_stacksize-1; i>=tos; i--) {
+ for (i=talloc_stacksize-1; i>0; i--) {
+ if (frame == talloc_stack[i]) {
+ break;
+ }
talloc_free(talloc_stack[i]);
}
- talloc_stacksize = tos;
+ talloc_stacksize = i;
return 0;
}
@@ -64,7 +66,6 @@ static int talloc_pop(int *ptr)
TALLOC_CTX *talloc_stackframe(void)
{
TALLOC_CTX **tmp, *top;
- int *cleanup;
if (!(tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *,
talloc_stacksize + 1))) {
@@ -77,12 +78,7 @@ TALLOC_CTX *talloc_stackframe(void)
goto fail;
}
- if (!(cleanup = talloc(top, int))) {
- goto fail;
- }
-
- *cleanup = talloc_stacksize;
- talloc_set_destructor(cleanup, talloc_pop);
+ talloc_set_destructor(top, talloc_pop);
talloc_stack[talloc_stacksize++] = top;