From 4eeb1831bee8c424a60b5ca05667b5d1c1bb662e Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 11 Sep 2013 11:47:08 -0300 Subject: [PATCH] new names and better order for GC states (sweep first lists that can have dead objects) --- lgc.c | 30 +++++++++++++++--------------- lgc.h | 18 +++++++++--------- ltests.c | 12 ++++++------ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/lgc.c b/lgc.c index 355c1003..be6ca0c1 100644 --- a/lgc.c +++ b/lgc.c @@ -1,5 +1,5 @@ /* -** $Id: lgc.c,v 2.161 2013/09/11 13:24:55 roberto Exp roberto $ +** $Id: lgc.c,v 2.162 2013/09/11 14:09:55 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -1042,7 +1042,7 @@ static void setpause (global_State *g, l_mem estimate) { static int entersweep (lua_State *L) { global_State *g = G(L); int n = 0; - g->gcstate = GCSsweeplocal; + g->gcstate = GCSswplocalgc; lua_assert(g->sweepgc == NULL); g->sweepgc = sweeptolive(L, &g->localgc, &n); if (g->sweepgc == NULL) /* no live objects in local list? */ @@ -1151,25 +1151,25 @@ static lu_mem singlestep (lua_State *L) { sw = entersweep(L); return work + sw * GCSWEEPCOST; } - case GCSsweeplocal: { - return sweepstep(L, g, GCSsweeplocfin, &g->localfin); + case GCSswplocalgc: { /* sweep local objects */ + return sweepstep(L, g, GCSswpallgc, &g->allgc); } - case GCSsweeplocfin: { - return sweepstep(L, g, GCSsweepfin, &g->finobj); + case GCSswpallgc: { /* sweep non-local objects */ + return sweepstep(L, g, GCSswpthreads, &g->mainthread->next); } - case GCSsweepfin: { - return sweepstep(L, g, GCSsweepall, &g->allgc); + case GCSswpthreads: { /* sweep threads */ + return sweepstep(L, g, GCSswplocalfin, &g->localfin); } - case GCSsweepall: { - return sweepstep(L, g, GCSsweeptobefnz, &g->tobefnz); + case GCSswplocalfin: { /* sweep local objects with finalizers */ + return sweepstep(L, g, GCSswpfinobj, &g->finobj); } - case GCSsweeptobefnz: { - return sweepstep(L, g, GCSsweepthreads, &g->mainthread->next); + case GCSswpfinobj: { /* sweep non-local objects with finalizers */ + return sweepstep(L, g, GCSswptobefnz, &g->tobefnz); } - case GCSsweepthreads: { - return sweepstep(L, g, GCSsweepend, NULL); + case GCSswptobefnz: { /* sweep objects to be finalized */ + return sweepstep(L, g, GCSswpend, NULL); } - case GCSsweepend: { + case GCSswpend: { /* finish sweeps */ makewhite(g, obj2gco(g->mainthread)); /* sweep main thread */ checkBuffer(L); g->gcstate = GCSpause; /* finish collection */ diff --git a/lgc.h b/lgc.h index 7a449829..91e241a0 100644 --- a/lgc.h +++ b/lgc.h @@ -1,5 +1,5 @@ /* -** $Id: lgc.h,v 2.73 2013/09/11 12:47:48 roberto Exp roberto $ +** $Id: lgc.h,v 2.74 2013/09/11 14:09:55 roberto Exp roberto $ ** Garbage Collector ** See Copyright Notice in lua.h */ @@ -38,18 +38,18 @@ */ #define GCSpropagate 0 #define GCSatomic 1 -#define GCSsweeplocal 2 -#define GCSsweeplocfin 3 -#define GCSsweepfin 4 -#define GCSsweepall 5 -#define GCSsweeptobefnz 6 -#define GCSsweepthreads 7 -#define GCSsweepend 8 +#define GCSswplocalgc 2 +#define GCSswpallgc 4 +#define GCSswpthreads 3 +#define GCSswplocalfin 5 +#define GCSswpfinobj 6 +#define GCSswptobefnz 7 +#define GCSswpend 8 #define GCSpause 9 #define issweepphase(g) \ - (GCSsweeplocal <= (g)->gcstate && (g)->gcstate <= GCSsweepend) + (GCSswplocalgc <= (g)->gcstate && (g)->gcstate <= GCSswpend) /* diff --git a/ltests.c b/ltests.c index 0f6a23dd..bf32c115 100644 --- a/ltests.c +++ b/ltests.c @@ -1,5 +1,5 @@ /* -** $Id: ltests.c,v 2.157 2013/09/11 12:47:48 roberto Exp roberto $ +** $Id: ltests.c,v 2.158 2013/09/11 14:09:55 roberto Exp roberto $ ** Internal Module for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ @@ -434,14 +434,14 @@ int lua_checkmemory (lua_State *L) { markgrays(g); /* check 'localgc' list */ checkgray(g, g->localgc); - maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSsweeplocal); + maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSswplocalgc); for (o = g->localgc; o != NULL; o = gch(o)->next) { checkobject(g, o, maybedead); lua_assert(!tofinalize(o) && !testbit(o->gch.marked, LOCALMARK)); } /* check 'allgc' list */ checkgray(g, g->allgc); - maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSsweepall); + maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSswpallgc); for (o = g->allgc; o != NULL; o = gch(o)->next) { checkobject(g, o, maybedead); lua_assert(!tofinalize(o) && testbit(o->gch.marked, LOCALMARK)); @@ -449,7 +449,7 @@ int lua_checkmemory (lua_State *L) { } /* check thread list */ checkgray(g, obj2gco(g->mainthread)); - maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSsweepthreads); + maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSswpthreads); for (o = obj2gco(g->mainthread); o != NULL; o = gch(o)->next) { checkobject(g, o, maybedead); lua_assert(!tofinalize(o) && testbit(o->gch.marked, LOCALMARK)); @@ -655,8 +655,8 @@ static int gc_local (lua_State *L) { static int gc_state (lua_State *L) { static const char *statenames[] = {"propagate", "atomic", - "sweeplocal", "sweeplocfin", "sweepfin", "sweepall", - "sweeptobefnz", "sweepthreads", "sweepend", "pause", ""}; + "sweeplocalgc", "sweepallgc", "sweepthreads", "sweeplocalfin", + "sweepfinobj", "sweeptobefnz", "sweepend", "pause", ""}; int option = luaL_checkoption(L, 1, "", statenames); if (option == GCSpause + 1) { lua_pushstring(L, statenames[G(L)->gcstate]);