From 6bc190d6dd7fd0ab028c39c1463477a863f6943a Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 27 Aug 2013 12:54:38 -0700 Subject: Inside _talloc_free_internal(), always call talloc_memlimit_update_on_free() before we free the real memory. Signed-off-by: Jeremy Allison Reviewed-by: Simo Sorce --- lib/talloc/talloc.c | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) (limited to 'lib') diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c index c45ac9327b..74eca3f5e6 100644 --- a/lib/talloc/talloc.c +++ b/lib/talloc/talloc.c @@ -909,29 +909,6 @@ static inline int _talloc_free_internal(void *ptr, const char *location) tc->flags |= TALLOC_FLAG_FREE; - /* - * If we are part of a memory limited context hierarchy - * we need to subtract the memory used from the counters - */ - if (tc->limit) { - struct talloc_memlimit *l; - - for (l = tc->limit; l != NULL; l = l->upper) { - if (l->cur_size >= tc->size+TC_HDR_SIZE) { - l->cur_size -= tc->size+TC_HDR_SIZE; - } else { - talloc_abort("cur_size memlimit counter not correct!"); - return 0; - } - } - - if (tc->limit->parent == tc) { - free(tc->limit); - } - - tc->limit = NULL; - } - /* we mark the freed memory with where we called the free * from. This means on a double free error we can report where * the first free came from @@ -952,6 +929,8 @@ static inline int _talloc_free_internal(void *ptr, const char *location) return 0; } + talloc_memlimit_update_on_free(tc); + TC_INVALIDATE_FULL_CHUNK(tc); free(tc); return 0; @@ -962,6 +941,8 @@ static inline int _talloc_free_internal(void *ptr, const char *location) return 0; } + talloc_memlimit_update_on_free(tc); + TC_INVALIDATE_FULL_CHUNK(tc); free(tc); return 0; -- cgit