aboutsummaryrefslogtreecommitdiffstats
path: root/mem-pool.c
diff options
context:
space:
mode:
authorJameson Miller <jamill@microsoft.com>2018-07-02 19:49:39 +0000
committerJunio C Hamano <gitster@pobox.com>2018-07-03 10:58:27 -0700
commit8616a2d0cb57865540f1c00ac2e5385a6cc5d84e (patch)
treeaa15c9800bf6305fd1dd5491b3abb2a591b1d089 /mem-pool.c
parent8e72d67529ba0adfb6f7d24a21e909c2a1e1d069 (diff)
downloadgit-8616a2d0cb57865540f1c00ac2e5385a6cc5d84e.tar.gz
block alloc: add validations around cache_entry lifecyle
Add an option (controlled by an environment variable) perform extra validations on mem_pool allocated cache entries. When set: 1) Invalidate cache_entry memory when discarding cache_entry. 2) When discarding index_state struct, verify that all cache_entries were allocated from expected mem_pool. 3) When discarding mem_pools, invalidate mem_pool memory. This should provide extra checks that mem_pools and their allocated cache_entries are being used as expected. Signed-off-by: Jameson Miller <jamill@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'mem-pool.c')
-rw-r--r--mem-pool.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/mem-pool.c b/mem-pool.c
index 139617cb23..a2841a4a9a 100644
--- a/mem-pool.c
+++ b/mem-pool.c
@@ -50,7 +50,7 @@ void mem_pool_init(struct mem_pool **mem_pool, size_t initial_size)
*mem_pool = pool;
}
-void mem_pool_discard(struct mem_pool *mem_pool)
+void mem_pool_discard(struct mem_pool *mem_pool, int invalidate_memory)
{
struct mp_block *block, *block_to_free;
@@ -59,6 +59,10 @@ void mem_pool_discard(struct mem_pool *mem_pool)
{
block_to_free = block;
block = block->next_block;
+
+ if (invalidate_memory)
+ memset(block_to_free->space, 0xDD, ((char *)block_to_free->end) - ((char *)block_to_free->space));
+
free(block_to_free);
}