summaryrefslogtreecommitdiff
path: root/source3/lib/talloc/talloc.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-01-10 11:34:07 +0100
committerVolker Lendecke <vl@samba.org>2008-01-10 12:28:20 +0100
commit4803cc5d3ce7db872bd21f6a1232f7cabc46186e (patch)
treea7ef7dac1b1889a2258412fb5f04242d84801dac /source3/lib/talloc/talloc.c
parente8909e284040b0a3fd55e3abe33ad57c94e20b7d (diff)
downloadsamba-4803cc5d3ce7db872bd21f6a1232f7cabc46186e.tar.gz
samba-4803cc5d3ce7db872bd21f6a1232f7cabc46186e.tar.bz2
samba-4803cc5d3ce7db872bd21f6a1232f7cabc46186e.zip
Mark talloc_pool memory for valgrind
(This used to be commit d89e42f1d2faa018c584025296d6be8195cbcf20)
Diffstat (limited to 'source3/lib/talloc/talloc.c')
-rw-r--r--source3/lib/talloc/talloc.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/source3/lib/talloc/talloc.c b/source3/lib/talloc/talloc.c
index 178bbb97e4..ea4480286e 100644
--- a/source3/lib/talloc/talloc.c
+++ b/source3/lib/talloc/talloc.c
@@ -245,6 +245,7 @@ static struct talloc_chunk *talloc_alloc_pool(struct talloc_chunk *parent,
struct talloc_chunk *pool_ctx = NULL;
size_t space_left;
struct talloc_chunk *result;
+ size_t chunk_size;
if (parent == NULL) {
return NULL;
@@ -267,15 +268,19 @@ static struct talloc_chunk *talloc_alloc_pool(struct talloc_chunk *parent,
/*
* Align size to 16 bytes
*/
- size = ((size + 15) & ~15);
+ chunk_size = ((size + 15) & ~15);
- if (space_left < size) {
+ if (space_left < chunk_size) {
return NULL;
}
result = (struct talloc_chunk *)pool_ctx->pool;
- pool_ctx->pool = (void *)((char *)result + size);
+#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_UNDEFINED)
+ VALGRIND_MAKE_MEM_UNDEFINED(result, size);
+#endif
+
+ pool_ctx->pool = (void *)((char *)result + chunk_size);
result->flags = TALLOC_MAGIC | TALLOC_FLAG_POOLMEM;
result->pool = pool_ctx;
@@ -358,6 +363,10 @@ void *talloc_pool(const void *context, size_t size)
*talloc_pool_objectcount(tc) = 1;
+#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_NOACCESS)
+ VALGRIND_MAKE_MEM_NOACCESS(tc->pool, size);
+#endif
+
return result;
}
@@ -859,6 +868,10 @@ void talloc_free_children(void *ptr)
if (tc->flags & TALLOC_FLAG_POOL) {
tc->pool = ((char *)tc + TC_HDR_SIZE + TALLOC_POOL_HDR_SIZE);
+#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_NOACCESS)
+ VALGRIND_MAKE_MEM_NOACCESS(
+ tc->pool, tc->size - TALLOC_POOL_HDR_SIZE);
+#endif
}
}