diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-09-29 09:42:13 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-09-29 09:42:13 -0300 |
commit | dad808a73a98a23729614b8814728d76b4e5d577 (patch) | |
tree | 945fabce1906c5f08fe6512476d7ca3d84017bca /lgc.c | |
parent | ca7fd50a4ec2f1b41292f859ba0d5e52a2b22a5c (diff) | |
download | lua-dad808a73a98a23729614b8814728d76b4e5d577.tar.gz lua-dad808a73a98a23729614b8814728d76b4e5d577.tar.bz2 lua-dad808a73a98a23729614b8814728d76b4e5d577.zip |
new way to count `nblocks' for GC (try to count bytes).
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lgc.c,v 1.66 2000/09/19 08:42:35 roberto Exp roberto $ | 2 | ** $Id: lgc.c,v 1.67 2000/09/25 14:52:10 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 | */ |
@@ -254,7 +254,7 @@ static void collectstringtab (lua_State *L, int limit) { | |||
254 | else { /* collect */ | 254 | else { /* collect */ |
255 | *p = next->nexthash; | 255 | *p = next->nexthash; |
256 | L->strt.nuse--; | 256 | L->strt.nuse--; |
257 | L->nblocks -= gcsizestring(L, next->u.s.len); | 257 | L->nblocks -= sizestring(next->u.s.len); |
258 | luaM_free(L, next); | 258 | luaM_free(L, next); |
259 | } | 259 | } |
260 | } | 260 | } |
@@ -343,7 +343,9 @@ long lua_collectgarbage (lua_State *L, long limit) { | |||
343 | recovered = recovered - L->nblocks; | 343 | recovered = recovered - L->nblocks; |
344 | L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit; | 344 | L->GCthreshold = (limit == 0) ? 2*L->nblocks : L->nblocks+limit; |
345 | if (L->Mbuffsize > MINBUFFER*2) { /* is buffer too big? */ | 345 | if (L->Mbuffsize > MINBUFFER*2) { /* is buffer too big? */ |
346 | L->Mbuffsize /= 2; /* still larger than MINBUFFER */ | 346 | size_t diff = L->Mbuffsize/2; |
347 | L->Mbuffsize -= diff; /* still larger than MINBUFFER */ | ||
348 | L->nblocks -= diff*sizeof(char); | ||
347 | luaM_reallocvector(L, L->Mbuffer, L->Mbuffsize, char); | 349 | luaM_reallocvector(L, L->Mbuffer, L->Mbuffsize, char); |
348 | } | 350 | } |
349 | callgcTM(L, &luaO_nilobject); | 351 | callgcTM(L, &luaO_nilobject); |