diff options
author | Jeremy Allison <jra@samba.org> | 2013-08-27 12:54:38 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2013-08-27 15:44:19 -0700 |
commit | 6bc190d6dd7fd0ab028c39c1463477a863f6943a (patch) | |
tree | f1c8825bc7018694c1392feaf018a1ca19d07012 /lib/talloc | |
parent | 4dfde7d33e7ac6c94833ecc758baff487ab67e4e (diff) | |
download | samba-6bc190d6dd7fd0ab028c39c1463477a863f6943a.tar.gz samba-6bc190d6dd7fd0ab028c39c1463477a863f6943a.tar.bz2 samba-6bc190d6dd7fd0ab028c39c1463477a863f6943a.zip |
Inside _talloc_free_internal(), always call talloc_memlimit_update_on_free() before we free the real memory.
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Simo Sorce <idra@samba.org>
Diffstat (limited to 'lib/talloc')
-rw-r--r-- | lib/talloc/talloc.c | 27 |
1 files changed, 4 insertions, 23 deletions
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; |