aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-11-10 13:40:46 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-11-10 13:40:46 -0200
commit0c725b2492051bdb776af3dae31881a162000894 (patch)
treed24b9106614f9c54a6ea75a57acdd0ab58964b5c
parentd915cf4f9dbe525f8faeb4cb04df13d5f08692da (diff)
downloadlua-0c725b2492051bdb776af3dae31881a162000894.tar.gz
lua-0c725b2492051bdb776af3dae31881a162000894.tar.bz2
lua-0c725b2492051bdb776af3dae31881a162000894.zip
buffer can shrink when too big
-rw-r--r--lbuffer.c7
-rw-r--r--lgc.c12
2 files changed, 12 insertions, 7 deletions
diff --git a/lbuffer.c b/lbuffer.c
index 85568b3c..181056f8 100644
--- a/lbuffer.c
+++ b/lbuffer.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbuffer.c,v 1.8 1999/02/25 19:20:40 roberto Exp roberto $ 2** $Id: lbuffer.c,v 1.9 1999/02/26 15:48:55 roberto Exp roberto $
3** Auxiliary functions for building Lua libraries 3** Auxiliary functions for building Lua libraries
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -24,9 +24,8 @@
24 24
25static void Openspace (int size) { 25static void Openspace (int size) {
26 lua_State *l = L; /* to optimize */ 26 lua_State *l = L; /* to optimize */
27 size += EXTRABUFF; 27 l->Mbuffsize = (l->Mbuffnext+size+EXTRABUFF)*2;
28 l->Mbuffsize = l->Mbuffnext+size; 28 luaM_reallocvector(l->Mbuffer, l->Mbuffsize, char);
29 luaM_growvector(l->Mbuffer, l->Mbuffnext, size, char, arrEM, MAX_INT);
30} 29}
31 30
32 31
diff --git a/lgc.c b/lgc.c
index c52e3f3b..a71693e1 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.c,v 1.29 1999/10/14 19:13:31 roberto Exp roberto $ 2** $Id: lgc.c,v 1.30 1999/11/04 17:22:26 roberto Exp roberto $
3** Garbage Collector 3** Garbage Collector
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -8,6 +8,7 @@
8#include "ldo.h" 8#include "ldo.h"
9#include "lfunc.h" 9#include "lfunc.h"
10#include "lgc.h" 10#include "lgc.h"
11#include "lmem.h"
11#include "lobject.h" 12#include "lobject.h"
12#include "lref.h" 13#include "lref.h"
13#include "lstate.h" 14#include "lstate.h"
@@ -83,9 +84,10 @@ static void travstack (void) {
83 84
84static void travlock (void) { 85static void travlock (void) {
85 int i; 86 int i;
86 for (i=0; i<L->refSize; i++) 87 for (i=0; i<L->refSize; i++) {
87 if (L->refArray[i].status == LOCK) 88 if (L->refArray[i].st == LOCK)
88 markobject(&L->refArray[i].o); 89 markobject(&L->refArray[i].o);
90 }
89} 91}
90 92
91 93
@@ -254,6 +256,10 @@ long lua_collectgarbage (long limit) {
254 luaD_gcIM(&luaO_nilobject); /* GC tag method for nil (signal end of GC) */ 256 luaD_gcIM(&luaO_nilobject); /* GC tag method for nil (signal end of GC) */
255 recovered = recovered - L->nblocks; 257 recovered = recovered - L->nblocks;
256 L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit; 258 L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit;
259 if (L->Mbuffsize > L->Mbuffnext*4) { /* is buffer too big? */
260 L->Mbuffsize /= 2; /* still larger than Mbuffnext*2 */
261 luaM_reallocvector(L->Mbuffer, L->Mbuffsize, char);
262 }
257 return recovered; 263 return recovered;
258} 264}
259 265