|
@@ -1131,7 +1131,7 @@ static void correctgraylists (global_State *g) {
|
|
|
|
|
|
|
|
|
/*
|
|
|
-** Mark 'OLD1' objects when starting a new young collection.
|
|
|
+** Mark black 'OLD1' objects when starting a new young collection.
|
|
|
** Gray objects are already in some gray list, and so will be visited
|
|
|
** in the atomic step.
|
|
|
*/
|
|
@@ -1140,6 +1140,7 @@ static void markold (global_State *g, GCObject *from, GCObject *to) {
|
|
|
for (p = from; p != to; p = p->next) {
|
|
|
if (getage(p) == G_OLD1) {
|
|
|
lua_assert(!iswhite(p));
|
|
|
+ changeage(p, G_OLD1, G_OLD); /* now they are old */
|
|
|
if (isblack(p)) {
|
|
|
black2gray(p); /* should be '2white', but gray works too */
|
|
|
reallymarkobject(g, p);
|
|
@@ -1176,16 +1177,16 @@ static void youngcollection (lua_State *L, global_State *g) {
|
|
|
/* sweep nursery and get a pointer to its last live element */
|
|
|
g->gcstate = GCSswpallgc;
|
|
|
psurvival = sweepgen(L, g, &g->allgc, g->survival);
|
|
|
- /* sweep 'survival' and 'old' */
|
|
|
- sweepgen(L, g, psurvival, g->reallyold);
|
|
|
+ /* sweep 'survival' */
|
|
|
+ sweepgen(L, g, psurvival, g->old);
|
|
|
g->reallyold = g->old;
|
|
|
g->old = *psurvival; /* 'survival' survivals are old now */
|
|
|
g->survival = g->allgc; /* all news are survivals */
|
|
|
|
|
|
/* repeat for 'finobj' lists */
|
|
|
psurvival = sweepgen(L, g, &g->finobj, g->finobjsur);
|
|
|
- /* sweep 'survival' and 'old' */
|
|
|
- sweepgen(L, g, psurvival, g->finobjrold);
|
|
|
+ /* sweep 'survival' */
|
|
|
+ sweepgen(L, g, psurvival, g->finobjold);
|
|
|
g->finobjrold = g->finobjold;
|
|
|
g->finobjold = *psurvival; /* 'survival' survivals are old now */
|
|
|
g->finobjsur = g->finobj; /* all news are survivals */
|