aboutsummaryrefslogtreecommitdiff
path: root/lmem.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-05-20 17:43:06 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-05-20 17:43:06 -0300
commit48326500d039c360f5abd0fe073902046124b1ba (patch)
tree66a2dcbe6e8d5d99988df36c95d1876343eeb0a7 /lmem.c
parentc8d219798a2edaf551284e9a49d3ac8da304aff1 (diff)
downloadlua-48326500d039c360f5abd0fe073902046124b1ba.tar.gz
lua-48326500d039c360f5abd0fe073902046124b1ba.tar.bz2
lua-48326500d039c360f5abd0fe073902046124b1ba.zip
longer marks when controling memory leaks
Diffstat (limited to 'lmem.c')
-rw-r--r--lmem.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lmem.c b/lmem.c
index fda64813..556f3a8a 100644
--- a/lmem.c
+++ b/lmem.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lmem.c,v 1.14 1999/03/01 17:49:13 roberto Exp roberto $ 2** $Id: lmem.c,v 1.15 1999/05/11 14:18:40 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*/
@@ -83,6 +83,7 @@ void *luaM_growaux (void *block, unsigned long nelems, int inc, int size,
83 83
84 84
85#define HEADER (sizeof(double)) 85#define HEADER (sizeof(double))
86#define MARKSIZE 32
86 87
87#define MARK 55 88#define MARK 55
88 89
@@ -93,8 +94,9 @@ unsigned long totalmem = 0;
93static void *checkblock (void *block) { 94static void *checkblock (void *block) {
94 unsigned long *b = (unsigned long *)((char *)block - HEADER); 95 unsigned long *b = (unsigned long *)((char *)block - HEADER);
95 unsigned long size = *b; 96 unsigned long size = *b;
96 LUA_ASSERT(*(((char *)b)+size+HEADER) == MARK, 97 int i;
97 "corrupted block"); 98 for (i=0;i<MARKSIZE;i++)
99 LUA_ASSERT(*(((char *)b)+size+HEADER+i) == MARK+i, "corrupted block");
98 numblocks--; 100 numblocks--;
99 totalmem -= size; 101 totalmem -= size;
100 return b; 102 return b;
@@ -102,7 +104,7 @@ static void *checkblock (void *block) {
102 104
103 105
104void *luaM_realloc (void *block, unsigned long size) { 106void *luaM_realloc (void *block, unsigned long size) {
105 unsigned long realsize = HEADER+size+1; 107 unsigned long realsize = HEADER+size+MARKSIZE;
106 if (realsize != (size_t)realsize) 108 if (realsize != (size_t)realsize)
107 lua_error("memory allocation error: block too big"); 109 lua_error("memory allocation error: block too big");
108 if (size == 0) { 110 if (size == 0) {
@@ -122,7 +124,7 @@ void *luaM_realloc (void *block, unsigned long size) {
122 totalmem += size; 124 totalmem += size;
123 numblocks++; 125 numblocks++;
124 *(unsigned long *)block = size; 126 *(unsigned long *)block = size;
125 *(((char *)block)+size+HEADER) = MARK; 127 { int i; for (i=0;i<MARKSIZE;i++) *(((char *)block)+size+HEADER+i) = MARK+i; }
126 return (unsigned long *)((char *)block+HEADER); 128 return (unsigned long *)((char *)block+HEADER);
127} 129}
128 130