From e4f609d0ee1cbbd357bec00c43effc659971bc7a Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy <roberto@inf.puc-rio.br> Date: Wed, 4 Jul 2012 12:52:38 -0300 Subject: collector in generational mode must be in 'propagate' state when not running a collection --- ltests.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'ltests.c') diff --git a/ltests.c b/ltests.c index 0a8b526a..610af463 100644 --- a/ltests.c +++ b/ltests.c @@ -1,5 +1,5 @@ /* -** $Id: ltests.c,v 2.130 2012/06/07 18:52:47 roberto Exp roberto $ +** $Id: ltests.c,v 2.131 2012/07/02 15:38:36 roberto Exp roberto $ ** Internal Module for Debugging of the Lua Implementation ** See Copyright Notice in lua.h */ @@ -182,8 +182,8 @@ void *debug_realloc (void *ud, void *b, size_t oldsize, size_t size) { static int testobjref1 (global_State *g, GCObject *f, GCObject *t) { if (isdead(g,t)) return 0; - if (isgenerational(g) || !issweepphase(g)) - return !isblack(f) || !iswhite(t); + if (!issweepphase(g)) + return !(isblack(f) && iswhite(t)); else return 1; } @@ -329,7 +329,7 @@ static void checkobject (global_State *g, GCObject *o, int maybedead) { if (isdead(g, o)) lua_assert(maybedead); else { - if (g->gcstate == GCSpause && !isgenerational(g)) + if (g->gcstate == GCSpause) lua_assert(iswhite(o)); switch (gch(o)->tt) { case LUA_TUPVAL: { @@ -432,6 +432,8 @@ int lua_checkmemory (lua_State *L) { lua_assert(!iswhite(obj2gco(g->mainthread))); lua_assert(!iswhite(gcvalue(&g->l_registry))); } + else /* generational mode keeps collector in 'propagate' state */ + lua_assert(!isgenerational(g)); lua_assert(!isdead(g, gcvalue(&g->l_registry))); checkstack(g, g->mainthread); resetbit(g->mainthread->marked, TESTGRAYBIT); @@ -457,7 +459,7 @@ int lua_checkmemory (lua_State *L) { /* check 'tobefnz' list */ checkold(g, g->tobefnz); for (o = g->tobefnz; o != NULL; o = gch(o)->next) { - lua_assert(!iswhite(o)); + lua_assert(!iswhite(o) || g->gcstate == GCSpause); lua_assert(!isdead(g, o) && testbit(o->gch.marked, SEPARATED)); lua_assert(gch(o)->tt == LUA_TUSERDATA || gch(o)->tt == LUA_TTABLE); -- cgit v1.2.3-55-g6feb