From 6b8cdc9cdd545508af85d1de2013ea0fc64792b0 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 11 Jun 2002 13:26:12 -0300 Subject: Lua now uses only `realloc' for all its memory management --- lmem.c | 15 +++++++++++---- ltests.c | 7 +++++-- ltests.h | 4 +--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lmem.c b/lmem.c index 99b0dafc..00c7253b 100644 --- a/lmem.c +++ b/lmem.c @@ -1,5 +1,5 @@ /* -** $Id: lmem.c,v 1.54 2002/05/01 20:40:42 roberto Exp roberto $ +** $Id: lmem.c,v 1.55 2002/05/15 18:57:44 roberto Exp roberto $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ @@ -17,9 +17,14 @@ +/* +** definition for realloc function. It must assure that +** l_realloc(block, x, 0) frees the block, and l_realloc(NULL, 0, x) +** allocates a new block (ANSI C assures that). +** (`os' is the old block size; some allocators may use that.) +*/ #ifndef l_realloc #define l_realloc(b,os,s) realloc(b,s) -#define l_free(b,s) free(b) #endif @@ -50,8 +55,10 @@ void *luaM_growaux (lua_State *L, void *block, int *size, int size_elems, */ void *luaM_realloc (lua_State *L, void *block, lu_mem oldsize, lu_mem size) { if (size == 0) { - l_free(block, oldsize); /* block may be NULL; that is OK for free */ - block = NULL; + if (block != NULL) { + l_realloc(block, oldsize, size); + block = NULL; + } } else if (size >= MAX_SIZET) luaG_runerror(L, "memory allocation error: block too big"); diff --git a/ltests.c b/ltests.c index c348a87c..bf7c19b3 100644 --- a/ltests.c +++ b/ltests.c @@ -1,5 +1,5 @@ /* -** $Id: ltests.c,v 1.122 2002/05/16 14:59:49 roberto Exp roberto $ +** $Id: ltests.c,v 1.123 2002/06/03 20:11:41 roberto Exp roberto $ ** Internal Module for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ @@ -96,7 +96,10 @@ static void freeblock (void *block) { void *debug_realloc (void *block, size_t oldsize, size_t size) { - lua_assert((oldsize == 0) ? block == NULL : oldsize == *blocksize(block)); + lua_assert((oldsize == 0) == (block == NULL)); + lua_assert(oldsize == 0 || oldsize == *blocksize(block)); + /* ISO does not specify what realloc(NULL, 0) does */ + lua_assert(block != NULL || size > 0); if (size == 0) { freeblock(block); return NULL; diff --git a/ltests.h b/ltests.h index 28604c60..6aef3984 100644 --- a/ltests.h +++ b/ltests.h @@ -1,5 +1,5 @@ /* -** $Id: ltests.h,v 1.11 2002/01/11 20:23:57 roberto Exp roberto $ +** $Id: ltests.h,v 1.12 2002/03/08 19:17:59 roberto Exp roberto $ ** Internal Header for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ @@ -32,9 +32,7 @@ extern unsigned long memdebug_maxmem; extern unsigned long memdebug_memlimit; -#define l_malloc(s) debug_realloc(NULL, 0, s) #define l_realloc(b, os, s) debug_realloc(b, os, s) -#define l_free(b, s) debug_realloc(b, s, 0) void *debug_realloc (void *block, size_t oldsize, size_t size); -- cgit v1.2.3-55-g6feb