diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenlib/CMakeLists.txt | 4 | ||||
-rw-r--r-- | source/blender/blenlib/intern/BLI_mempool.c | 20 |
2 files changed, 24 insertions, 0 deletions
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 31125fd3153..65ba545ef13 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -178,6 +178,10 @@ if(WITH_BINRELOC) add_definitions(-DWITH_BINRELOC) endif() +if(WITH_MEM_VALGRIND) + add_definitions(-DWITH_MEM_VALGRIND) +endif() + if(WIN32) list(APPEND INC ../../../intern/utfconv diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c index febf09745fb..8301a7df35b 100644 --- a/source/blender/blenlib/intern/BLI_mempool.c +++ b/source/blender/blenlib/intern/BLI_mempool.c @@ -45,6 +45,9 @@ #include "BLI_strict_flags.h" /* keep last */ +#ifdef WITH_MEM_VALGRIND +# include "valgrind/memcheck.h" +#endif /* note: copied from BLO_blend_defs.h, don't use here because we're in BLI */ #ifdef __BIG_ENDIAN__ @@ -275,6 +278,10 @@ BLI_mempool *BLI_mempool_create(unsigned int esize, unsigned int totelem, lasttail = mempool_chunk_add(pool, mpchunk, lasttail); } +#ifdef WITH_MEM_VALGRIND + VALGRIND_CREATE_MEMPOOL(pool, 0, false); +#endif + return pool; } @@ -297,6 +304,11 @@ void *BLI_mempool_alloc(BLI_mempool *pool) } pool->free = pool->free->next; + +#ifdef WITH_MEM_VALGRIND + VALGRIND_MEMPOOL_ALLOC(pool, retval, pool->esize); +#endif + return retval; } @@ -367,6 +379,10 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr) } curnode->next = NULL; /* terminate the list */ } + +#ifdef WITH_MEM_VALGRIND + VALGRIND_MEMPOOL_FREE(pool, addr); +#endif } int BLI_mempool_count(BLI_mempool *pool) @@ -582,6 +598,10 @@ void BLI_mempool_destroy(BLI_mempool *pool) { mempool_chunk_free_all(&pool->chunks, pool->flag); +#ifdef WITH_MEM_VALGRIND + VALGRIND_DESTROY_MEMPOOL(pool); +#endif + if (pool->flag & BLI_MEMPOOL_SYSMALLOC) { free(pool); } |