forked from bartvdbraak/blender
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).
This commit is contained in:
parent
6b2e563924
commit
9b1be7ce93
@ -278,6 +278,10 @@ mark_as_advanced(LLVM_STATIC)
|
||||
option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
|
||||
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
|
||||
option(WITH_CXX_GUARDEDALLOC "Enable GuardedAlloc for C++ memory allocation tracking (only enable for development)" OFF)
|
||||
mark_as_advanced(WITH_CXX_GUARDEDALLOC)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user