Skip to content
Snippets Groups Projects
Commit 9b1be7ce authored by Campbell Barton's avatar Campbell Barton
Browse files

add cmake option WITH_MEM_VALGRIND, helps to track down errors with mempool...

add cmake option WITH_MEM_VALGRIND, helps to track down errors with mempool use which sometimes only show up as bugs in very rare cases (because even though the element is freed, the chunk is still allocated).
parent 6b2e5639
No related branches found
No related tags found
No related merge requests found
...@@ -278,6 +278,10 @@ mark_as_advanced(LLVM_STATIC) ...@@ -278,6 +278,10 @@ mark_as_advanced(LLVM_STATIC)
option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF) option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
mark_as_advanced(WITH_MEM_JEMALLOC) mark_as_advanced(WITH_MEM_JEMALLOC)
# currently only used for BLI_mempool
option(WITH_MEM_VALGRIND "Enable extended valgrind support for better reporting" OFF)
mark_as_advanced(WITH_MEM_VALGRIND)
# Debug # Debug
option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF) option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
mark_as_advanced(WITH_CXX_GUARDEDALLOC) mark_as_advanced(WITH_CXX_GUARDEDALLOC)
......
...@@ -178,6 +178,10 @@ if(WITH_BINRELOC) ...@@ -178,6 +178,10 @@ if(WITH_BINRELOC)
add_definitions(-DWITH_BINRELOC) add_definitions(-DWITH_BINRELOC)
endif() endif()
if(WITH_MEM_VALGRIND)
add_definitions(-DWITH_MEM_VALGRIND)
endif()
if(WIN32) if(WIN32)
list(APPEND INC list(APPEND INC
../../../intern/utfconv ../../../intern/utfconv
......
...@@ -45,6 +45,9 @@ ...@@ -45,6 +45,9 @@
#include "BLI_strict_flags.h" /* keep last */ #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 */ /* note: copied from BLO_blend_defs.h, don't use here because we're in BLI */
#ifdef __BIG_ENDIAN__ #ifdef __BIG_ENDIAN__
...@@ -275,6 +278,10 @@ BLI_mempool *BLI_mempool_create(unsigned int esize, unsigned int totelem, ...@@ -275,6 +278,10 @@ BLI_mempool *BLI_mempool_create(unsigned int esize, unsigned int totelem,
lasttail = mempool_chunk_add(pool, mpchunk, lasttail); lasttail = mempool_chunk_add(pool, mpchunk, lasttail);
} }
#ifdef WITH_MEM_VALGRIND
VALGRIND_CREATE_MEMPOOL(pool, 0, false);
#endif
return pool; return pool;
} }
...@@ -297,6 +304,11 @@ void *BLI_mempool_alloc(BLI_mempool *pool) ...@@ -297,6 +304,11 @@ void *BLI_mempool_alloc(BLI_mempool *pool)
} }
pool->free = pool->free->next; pool->free = pool->free->next;
#ifdef WITH_MEM_VALGRIND
VALGRIND_MEMPOOL_ALLOC(pool, retval, pool->esize);
#endif
return retval; return retval;
} }
...@@ -367,6 +379,10 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr) ...@@ -367,6 +379,10 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr)
} }
curnode->next = NULL; /* terminate the list */ curnode->next = NULL; /* terminate the list */
} }
#ifdef WITH_MEM_VALGRIND
VALGRIND_MEMPOOL_FREE(pool, addr);
#endif
} }
int BLI_mempool_count(BLI_mempool *pool) int BLI_mempool_count(BLI_mempool *pool)
...@@ -582,6 +598,10 @@ void BLI_mempool_destroy(BLI_mempool *pool) ...@@ -582,6 +598,10 @@ void BLI_mempool_destroy(BLI_mempool *pool)
{ {
mempool_chunk_free_all(&pool->chunks, pool->flag); mempool_chunk_free_all(&pool->chunks, pool->flag);
#ifdef WITH_MEM_VALGRIND
VALGRIND_DESTROY_MEMPOOL(pool);
#endif
if (pool->flag & BLI_MEMPOOL_SYSMALLOC) { if (pool->flag & BLI_MEMPOOL_SYSMALLOC) {
free(pool); free(pool);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment