aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2002-06-11 13:26:12 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2002-06-11 13:26:12 -0300
commit6b8cdc9cdd545508af85d1de2013ea0fc64792b0 (patch)
tree11a82496526f13e7937230fcc86775ed7eac56a0
parent000d081fd0966ba8f39178186d30319df37d631f (diff)
downloadlua-6b8cdc9cdd545508af85d1de2013ea0fc64792b0.tar.gz
lua-6b8cdc9cdd545508af85d1de2013ea0fc64792b0.tar.bz2
lua-6b8cdc9cdd545508af85d1de2013ea0fc64792b0.zip
Lua now uses only `realloc' for all its memory management
-rw-r--r--lmem.c15
-rw-r--r--ltests.c7
-rw-r--r--ltests.h4
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 @@
1/* 1/*
2** $Id: lmem.c,v 1.54 2002/05/01 20:40:42 roberto Exp roberto $ 2** $Id: lmem.c,v 1.55 2002/05/15 18:57:44 roberto Exp roberto $
3** Interface to Memory Manager 3** Interface to Memory Manager
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -17,9 +17,14 @@
17 17
18 18
19 19
20/*
21** definition for realloc function. It must assure that
22** l_realloc(block, x, 0) frees the block, and l_realloc(NULL, 0, x)
23** allocates a new block (ANSI C assures that).
24** (`os' is the old block size; some allocators may use that.)
25*/
20#ifndef l_realloc 26#ifndef l_realloc
21#define l_realloc(b,os,s) realloc(b,s) 27#define l_realloc(b,os,s) realloc(b,s)
22#define l_free(b,s) free(b)
23#endif 28#endif
24 29
25 30
@@ -50,8 +55,10 @@ void *luaM_growaux (lua_State *L, void *block, int *size, int size_elems,
50*/ 55*/
51void *luaM_realloc (lua_State *L, void *block, lu_mem oldsize, lu_mem size) { 56void *luaM_realloc (lua_State *L, void *block, lu_mem oldsize, lu_mem size) {
52 if (size == 0) { 57 if (size == 0) {
53 l_free(block, oldsize); /* block may be NULL; that is OK for free */ 58 if (block != NULL) {
54 block = NULL; 59 l_realloc(block, oldsize, size);
60 block = NULL;
61 }
55 } 62 }
56 else if (size >= MAX_SIZET) 63 else if (size >= MAX_SIZET)
57 luaG_runerror(L, "memory allocation error: block too big"); 64 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 @@
1/* 1/*
2** $Id: ltests.c,v 1.122 2002/05/16 14:59:49 roberto Exp roberto $ 2** $Id: ltests.c,v 1.123 2002/06/03 20:11:41 roberto Exp roberto $
3** Internal Module for Debugging of the Lua Implementation 3** Internal Module for Debugging of the Lua Implementation
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -96,7 +96,10 @@ static void freeblock (void *block) {
96 96
97 97
98void *debug_realloc (void *block, size_t oldsize, size_t size) { 98void *debug_realloc (void *block, size_t oldsize, size_t size) {
99 lua_assert((oldsize == 0) ? block == NULL : oldsize == *blocksize(block)); 99 lua_assert((oldsize == 0) == (block == NULL));
100 lua_assert(oldsize == 0 || oldsize == *blocksize(block));
101 /* ISO does not specify what realloc(NULL, 0) does */
102 lua_assert(block != NULL || size > 0);
100 if (size == 0) { 103 if (size == 0) {
101 freeblock(block); 104 freeblock(block);
102 return NULL; 105 return NULL;
diff --git a/ltests.h b/ltests.h
index 28604c60..6aef3984 100644
--- a/ltests.h
+++ b/ltests.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltests.h,v 1.11 2002/01/11 20:23:57 roberto Exp roberto $ 2** $Id: ltests.h,v 1.12 2002/03/08 19:17:59 roberto Exp roberto $
3** Internal Header for Debugging of the Lua Implementation 3** Internal Header for Debugging of the Lua Implementation
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -32,9 +32,7 @@ extern unsigned long memdebug_maxmem;
32extern unsigned long memdebug_memlimit; 32extern unsigned long memdebug_memlimit;
33 33
34 34
35#define l_malloc(s) debug_realloc(NULL, 0, s)
36#define l_realloc(b, os, s) debug_realloc(b, os, s) 35#define l_realloc(b, os, s) debug_realloc(b, os, s)
37#define l_free(b, s) debug_realloc(b, s, 0)
38 36
39void *debug_realloc (void *block, size_t oldsize, size_t size); 37void *debug_realloc (void *block, size_t oldsize, size_t size);
40 38