1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-12 12:23:50 +03:00

talloc_stackframe only needs 1 talloc

This commit is contained in:
Volker Lendecke
2008-01-06 17:25:20 +01:00
parent 079f2eba81
commit c0c2084d40

View File

@@ -41,16 +41,18 @@
static int talloc_stacksize; static int talloc_stacksize;
static TALLOC_CTX **talloc_stack; static TALLOC_CTX **talloc_stack;
static int talloc_pop(int *ptr) static int talloc_pop(TALLOC_CTX *frame)
{ {
int tos = *ptr;
int i; 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_free(talloc_stack[i]);
} }
talloc_stacksize = tos; talloc_stacksize = i;
return 0; return 0;
} }
@@ -64,7 +66,6 @@ static int talloc_pop(int *ptr)
TALLOC_CTX *talloc_stackframe(void) TALLOC_CTX *talloc_stackframe(void)
{ {
TALLOC_CTX **tmp, *top; TALLOC_CTX **tmp, *top;
int *cleanup;
if (!(tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *, if (!(tmp = TALLOC_REALLOC_ARRAY(NULL, talloc_stack, TALLOC_CTX *,
talloc_stacksize + 1))) { talloc_stacksize + 1))) {
@@ -77,12 +78,7 @@ TALLOC_CTX *talloc_stackframe(void)
goto fail; goto fail;
} }
if (!(cleanup = talloc(top, int))) { talloc_set_destructor(top, talloc_pop);
goto fail;
}
*cleanup = talloc_stacksize;
talloc_set_destructor(cleanup, talloc_pop);
talloc_stack[talloc_stacksize++] = top; talloc_stack[talloc_stacksize++] = top;