summaryrefslogtreecommitdiff
path: root/lib/talloc
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2013-08-27 12:57:43 -0700
committerJeremy Allison <jra@samba.org>2013-08-27 15:44:19 -0700
commit43860293225d14ca2c339277b42f8705322463ab (patch)
treef9018cdfde4b22fac6a700c60519460f2756f8f0 /lib/talloc
parent6bc190d6dd7fd0ab028c39c1463477a863f6943a (diff)
downloadsamba-43860293225d14ca2c339277b42f8705322463ab.tar.gz
samba-43860293225d14ca2c339277b42f8705322463ab.tar.bz2
samba-43860293225d14ca2c339277b42f8705322463ab.zip
In _talloc_steal_internal(), correctly decrement the memory limit in the source, and increment in the destination.
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.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c
index 74eca3f5e6..54f3c0a56d 100644
--- a/lib/talloc/talloc.c
+++ b/lib/talloc/talloc.c
@@ -976,11 +976,8 @@ static void *_talloc_steal_internal(const void *new_ctx, const void *ptr)
ctx_size = _talloc_total_limit_size(ptr, NULL, NULL);
- if (!talloc_memlimit_update(tc->limit->upper, ctx_size, 0)) {
- talloc_abort("cur_size memlimit counter not correct!");
- errno = EINVAL;
- return NULL;
- }
+ /* Decrement the memory limit from the source .. */
+ talloc_memlimit_shrink(tc->limit->upper, ctx_size);
if (tc->limit->parent == tc) {
tc->limit->upper = NULL;
@@ -1028,13 +1025,9 @@ static void *_talloc_steal_internal(const void *new_ctx, const void *ptr)
if (tc->limit || new_tc->limit) {
ctx_size = _talloc_total_limit_size(ptr, tc->limit,
new_tc->limit);
- }
-
- if (new_tc->limit) {
- struct talloc_memlimit *l;
-
- for (l = new_tc->limit; l != NULL; l = l->upper) {
- l->cur_size += ctx_size;
+ /* .. and increment it in the destination. */
+ if (new_tc->limit) {
+ talloc_memlimit_grow(new_tc->limit, ctx_size);
}
}