diff options
author | Volker Lendecke <vl@samba.org> | 2008-01-10 11:34:07 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2008-01-10 12:28:20 +0100 |
commit | 4803cc5d3ce7db872bd21f6a1232f7cabc46186e (patch) | |
tree | a7ef7dac1b1889a2258412fb5f04242d84801dac /source3/lib/talloc/talloc.c | |
parent | e8909e284040b0a3fd55e3abe33ad57c94e20b7d (diff) | |
download | samba-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.c | 19 |
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 } } |