From ea45f3eb284e86354f19536b22a49b61f1800cc3 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 13 Jan 2000 14:30:47 -0200 Subject: [PATCH] better separation between debug code and regular code --- lmem.c | 154 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 81 insertions(+), 73 deletions(-) diff --git a/lmem.c b/lmem.c index 349bf751..81935d98 100644 --- a/lmem.c +++ b/lmem.c @@ -1,5 +1,5 @@ /* -** $Id: lmem.c,v 1.22 1999/12/14 18:31:20 roberto Exp roberto $ +** $Id: lmem.c,v 1.23 1999/12/27 17:33:22 roberto Exp roberto $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ @@ -26,6 +26,86 @@ +#ifdef DEBUG +/* +** {====================================================================== +** Controled version for realloc. +** ======================================================================= +*/ + + +#include +#include + + +#define realloc(b, s) debug_realloc(b, s) +#define malloc(b) debug_realloc(NULL, 0) +#define free(b) debug_realloc(b, 0) + + +#define HEADER (sizeof(double)) /* maximum alignment */ +#define MARKSIZE 16 +#define MARK 0x55 /* 01010101 (a nice pattern) */ + + +#define blocksize(b) ((unsigned long *)((char *)(b) - HEADER)) + +unsigned long memdebug_numblocks = 0; +unsigned long memdebug_total = 0; + + +static void *checkblock (void *block) { + unsigned long *b = blocksize(block); + unsigned long size = *b; + int i; + for (i=0;i size) oldsize = size; + memcpy(newblock+HEADER, block, oldsize); + freeblock(block); /* erase (and check) old copy */ + } + if (newblock == NULL) return NULL; + memdebug_total += size; + memdebug_numblocks++; + *(unsigned long *)newblock = size; + for (i=0;i - - -#define HEADER (sizeof(double)) -#define MARKSIZE 16 - -#define MARK 55 - - -#define blocksize(b) ((unsigned long *)((char *)(b) - HEADER)) - -unsigned long numblocks = 0; -unsigned long totalmem = 0; - - -static void *checkblock (void *block) { - unsigned long *b = blocksize(block); - unsigned long size = *b; - int i; - for (i=0;i size) oldsize = size; - memcpy(newblock+HEADER, block, oldsize); - freeblock(block); /* erase (and check) old copy */ - } - if (newblock == NULL) - lua_error(L, memEM); - totalmem += size; - numblocks++; - *(unsigned long *)newblock = size; - for (i=0;i