diff --git a/intern/guardedalloc/MEM_guardedalloc.h b/intern/guardedalloc/MEM_guardedalloc.h index 9e3927314d3..74cc365140f 100644 --- a/intern/guardedalloc/MEM_guardedalloc.h +++ b/intern/guardedalloc/MEM_guardedalloc.h @@ -102,6 +102,9 @@ extern "C" { * blocks. */ void MEM_printmemlist(void); + /** calls the function on all allocated memory blocks. */ + void MEM_callbackmemlist(void (*func)(void*)); + /** Print statistics about memory usage */ void MEM_printmemlist_stats(void); diff --git a/intern/guardedalloc/intern/mallocn.c b/intern/guardedalloc/intern/mallocn.c index ca7f2a4d506..ecf89c894d2 100644 --- a/intern/guardedalloc/intern/mallocn.c +++ b/intern/guardedalloc/intern/mallocn.c @@ -460,6 +460,24 @@ static void MEM_printmemlist_internal( int pydict ) mem_unlock_thread(); } +void MEM_callbackmemlist(void (*func)(void*)) { + MemHead *membl; + + mem_lock_thread(); + + membl = membase->first; + if (membl) membl = MEMNEXT(membl); + + while(membl) { + func(membl+1); + if(membl->next) + membl= MEMNEXT(membl->next); + else break; + } + + mem_unlock_thread(); +} + void MEM_printmemlist( void ) { MEM_printmemlist_internal(0); }