From 0c725b2492051bdb776af3dae31881a162000894 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 10 Nov 1999 13:40:46 -0200 Subject: buffer can shrink when too big --- lbuffer.c | 7 +++---- lgc.c | 12 +++++++++--- 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 @@ /* -** $Id: lbuffer.c,v 1.8 1999/02/25 19:20:40 roberto Exp roberto $ +** $Id: lbuffer.c,v 1.9 1999/02/26 15:48:55 roberto Exp roberto $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ @@ -24,9 +24,8 @@ static void Openspace (int size) { lua_State *l = L; /* to optimize */ - size += EXTRABUFF; - l->Mbuffsize = l->Mbuffnext+size; - luaM_growvector(l->Mbuffer, l->Mbuffnext, size, char, arrEM, MAX_INT); + l->Mbuffsize = (l->Mbuffnext+size+EXTRABUFF)*2; + luaM_reallocvector(l->Mbuffer, l->Mbuffsize, char); } diff --git a/lgc.c b/lgc.c index c52e3f3b..a71693e1 100644 --- a/lgc.c +++ b/lgc.c @@ -1,5 +1,5 @@ /* -** $Id: lgc.c,v 1.29 1999/10/14 19:13:31 roberto Exp roberto $ +** $Id: lgc.c,v 1.30 1999/11/04 17:22:26 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -8,6 +8,7 @@ #include "ldo.h" #include "lfunc.h" #include "lgc.h" +#include "lmem.h" #include "lobject.h" #include "lref.h" #include "lstate.h" @@ -83,9 +84,10 @@ static void travstack (void) { static void travlock (void) { int i; - for (i=0; irefSize; i++) - if (L->refArray[i].status == LOCK) + for (i=0; irefSize; i++) { + if (L->refArray[i].st == LOCK) markobject(&L->refArray[i].o); + } } @@ -254,6 +256,10 @@ long lua_collectgarbage (long limit) { luaD_gcIM(&luaO_nilobject); /* GC tag method for nil (signal end of GC) */ recovered = recovered - L->nblocks; L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit; + if (L->Mbuffsize > L->Mbuffnext*4) { /* is buffer too big? */ + L->Mbuffsize /= 2; /* still larger than Mbuffnext*2 */ + luaM_reallocvector(L->Mbuffer, L->Mbuffsize, char); + } return recovered; } -- cgit v1.2.3-55-g6feb