From f7d71499369fabc19ebc46ca723b6437943005de Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Wed, 11 Nov 2009 03:45:26 +0000 Subject: Debug tools: new function MEM_testN(void*) returns 0 if pointer is not in memlist --- intern/guardedalloc/MEM_guardedalloc.h | 6 ++++++ intern/guardedalloc/intern/mallocn.c | 24 +++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) (limited to 'intern/guardedalloc') diff --git a/intern/guardedalloc/MEM_guardedalloc.h b/intern/guardedalloc/MEM_guardedalloc.h index 74cc365140f..e404f174935 100644 --- a/intern/guardedalloc/MEM_guardedalloc.h +++ b/intern/guardedalloc/MEM_guardedalloc.h @@ -73,6 +73,12 @@ extern "C" { */ short MEM_freeN(void *vmemh); + + /** + * Return zero if memory is not in allocated list + */ + short MEM_testN(void *vmemh); + /** * Duplicates a block of memory, and returns a pointer to the * newly allocated block. */ diff --git a/intern/guardedalloc/intern/mallocn.c b/intern/guardedalloc/intern/mallocn.c index ecf89c894d2..d1114af2437 100644 --- a/intern/guardedalloc/intern/mallocn.c +++ b/intern/guardedalloc/intern/mallocn.c @@ -478,6 +478,29 @@ void MEM_callbackmemlist(void (*func)(void*)) { mem_unlock_thread(); } +short MEM_testN(void *vmemh) { + MemHead *membl; + + mem_lock_thread(); + + membl = membase->first; + if (membl) membl = MEMNEXT(membl); + + while(membl) { + if (vmemh == membl+1) + return 1; + + if(membl->next) + membl= MEMNEXT(membl->next); + else break; + } + + mem_unlock_thread(); + + print_error("Memoryblock %p: pointer not in memlist\n", vmemh); + return 0; +} + void MEM_printmemlist( void ) { MEM_printmemlist_internal(0); } @@ -518,7 +541,6 @@ short MEM_freeN(void *vmemh) /* anders compileertie niet meer */ } mem_lock_thread(); - if ((memh->tag1 == MEMTAG1) && (memh->tag2 == MEMTAG2) && ((memh->len & 0x3) == 0)) { memt = (MemTail *)(((char *) memh) + sizeof(MemHead) + memh->len); if (memt->tag3 == MEMTAG3){ -- cgit v1.2.3