aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-07-29 11:34:08 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-07-29 11:34:08 -0300
commitb4c353434f28f3e9d4c45e61d42b4fd07d76cad2 (patch)
treefebb2113f925844131481d3b60846b5624f2cbce
parent71f70df3271f6e8ae9e8efcaef3be19f8d37c161 (diff)
downloadlua-b4c353434f28f3e9d4c45e61d42b4fd07d76cad2.tar.gz
lua-b4c353434f28f3e9d4c45e61d42b4fd07d76cad2.tar.bz2
lua-b4c353434f28f3e9d4c45e61d42b4fd07d76cad2.zip
Details
The fields 'old' and 'finobjold' were renamed 'old1' and 'finobjold1', respectively, to make clearer the main ages of their elements.
-rw-r--r--lgc.c30
-rw-r--r--lstate.c4
-rw-r--r--lstate.h19
-rw-r--r--ltests.c4
4 files changed, 32 insertions, 25 deletions
diff --git a/lgc.c b/lgc.c
index eec73871..347b6778 100644
--- a/lgc.c
+++ b/lgc.c
@@ -932,15 +932,15 @@ static GCObject **findlast (GCObject **p) {
932/* 932/*
933** Move all unreachable objects (or 'all' objects) that need 933** Move all unreachable objects (or 'all' objects) that need
934** finalization from list 'finobj' to list 'tobefnz' (to be finalized). 934** finalization from list 'finobj' to list 'tobefnz' (to be finalized).
935** (Note that objects after 'finobjold' cannot be white, so they 935** (Note that objects after 'finobjold1' cannot be white, so they
936** don't need to be traversed. In incremental mode, 'finobjold' is NULL, 936** don't need to be traversed. In incremental mode, 'finobjold1' is NULL,
937** so the whole list is traversed.) 937** so the whole list is traversed.)
938*/ 938*/
939static void separatetobefnz (global_State *g, int all) { 939static void separatetobefnz (global_State *g, int all) {
940 GCObject *curr; 940 GCObject *curr;
941 GCObject **p = &g->finobj; 941 GCObject **p = &g->finobj;
942 GCObject **lastnext = findlast(&g->tobefnz); 942 GCObject **lastnext = findlast(&g->tobefnz);
943 while ((curr = *p) != g->finobjold) { /* traverse all finalizable objects */ 943 while ((curr = *p) != g->finobjold1) { /* traverse all finalizable objects */
944 lua_assert(tofinalize(curr)); 944 lua_assert(tofinalize(curr));
945 if (!(iswhite(curr) || all)) /* not being collected? */ 945 if (!(iswhite(curr) || all)) /* not being collected? */
946 p = &curr->next; /* don't bother with it */ 946 p = &curr->next; /* don't bother with it */
@@ -975,8 +975,8 @@ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) {
975 else { /* correct pointers into 'allgc' list, if needed */ 975 else { /* correct pointers into 'allgc' list, if needed */
976 if (o == g->survival) 976 if (o == g->survival)
977 g->survival = o->next; 977 g->survival = o->next;
978 if (o == g->old) 978 if (o == g->old1)
979 g->old = o->next; 979 g->old1 = o->next;
980 if (o == g->reallyold) 980 if (o == g->reallyold)
981 g->reallyold = o->next; 981 g->reallyold = o->next;
982 } 982 }
@@ -1178,17 +1178,17 @@ static void youngcollection (lua_State *L, global_State *g) {
1178 g->gcstate = GCSswpallgc; 1178 g->gcstate = GCSswpallgc;
1179 psurvival = sweepgen(L, g, &g->allgc, g->survival); 1179 psurvival = sweepgen(L, g, &g->allgc, g->survival);
1180 /* sweep 'survival' */ 1180 /* sweep 'survival' */
1181 sweepgen(L, g, psurvival, g->old); 1181 sweepgen(L, g, psurvival, g->old1);
1182 g->reallyold = g->old; 1182 g->reallyold = g->old1;
1183 g->old = *psurvival; /* 'survival' survivals are old now */ 1183 g->old1 = *psurvival; /* 'survival' survivals are old now */
1184 g->survival = g->allgc; /* all news are survivals */ 1184 g->survival = g->allgc; /* all news are survivals */
1185 1185
1186 /* repeat for 'finobj' lists */ 1186 /* repeat for 'finobj' lists */
1187 psurvival = sweepgen(L, g, &g->finobj, g->finobjsur); 1187 psurvival = sweepgen(L, g, &g->finobj, g->finobjsur);
1188 /* sweep 'survival' */ 1188 /* sweep 'survival' */
1189 sweepgen(L, g, psurvival, g->finobjold); 1189 sweepgen(L, g, psurvival, g->finobjold1);
1190 g->finobjrold = g->finobjold; 1190 g->finobjrold = g->finobjold1;
1191 g->finobjold = *psurvival; /* 'survival' survivals are old now */ 1191 g->finobjold1 = *psurvival; /* 'survival' survivals are old now */
1192 g->finobjsur = g->finobj; /* all news are survivals */ 1192 g->finobjsur = g->finobj; /* all news are survivals */
1193 1193
1194 sweepgen(L, g, &g->tobefnz, NULL); 1194 sweepgen(L, g, &g->tobefnz, NULL);
@@ -1202,11 +1202,11 @@ static void atomic2gen (lua_State *L, global_State *g) {
1202 g->gcstate = GCSswpallgc; 1202 g->gcstate = GCSswpallgc;
1203 sweep2old(L, &g->allgc); 1203 sweep2old(L, &g->allgc);
1204 /* everything alive now is old */ 1204 /* everything alive now is old */
1205 g->reallyold = g->old = g->survival = g->allgc; 1205 g->reallyold = g->old1 = g->survival = g->allgc;
1206 1206
1207 /* repeat for 'finobj' lists */ 1207 /* repeat for 'finobj' lists */
1208 sweep2old(L, &g->finobj); 1208 sweep2old(L, &g->finobj);
1209 g->finobjrold = g->finobjold = g->finobjsur = g->finobj; 1209 g->finobjrold = g->finobjold1 = g->finobjsur = g->finobj;
1210 1210
1211 sweep2old(L, &g->tobefnz); 1211 sweep2old(L, &g->tobefnz);
1212 1212
@@ -1239,10 +1239,10 @@ static lu_mem entergen (lua_State *L, global_State *g) {
1239*/ 1239*/
1240static void enterinc (global_State *g) { 1240static void enterinc (global_State *g) {
1241 whitelist(g, g->allgc); 1241 whitelist(g, g->allgc);
1242 g->reallyold = g->old = g->survival = NULL; 1242 g->reallyold = g->old1 = g->survival = NULL;
1243 whitelist(g, g->finobj); 1243 whitelist(g, g->finobj);
1244 whitelist(g, g->tobefnz); 1244 whitelist(g, g->tobefnz);
1245 g->finobjrold = g->finobjold = g->finobjsur = NULL; 1245 g->finobjrold = g->finobjold1 = g->finobjsur = NULL;
1246 g->gcstate = GCSpause; 1246 g->gcstate = GCSpause;
1247 g->gckind = KGC_INC; 1247 g->gckind = KGC_INC;
1248 g->lastatomic = 0; 1248 g->lastatomic = 0;
diff --git a/lstate.c b/lstate.c
index 06fa13d7..38a2b45a 100644
--- a/lstate.c
+++ b/lstate.c
@@ -413,8 +413,8 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
413 g->gckind = KGC_INC; 413 g->gckind = KGC_INC;
414 g->gcemergency = 0; 414 g->gcemergency = 0;
415 g->finobj = g->tobefnz = g->fixedgc = NULL; 415 g->finobj = g->tobefnz = g->fixedgc = NULL;
416 g->survival = g->old = g->reallyold = NULL; 416 g->survival = g->old1 = g->reallyold = NULL;
417 g->finobjsur = g->finobjold = g->finobjrold = NULL; 417 g->finobjsur = g->finobjold1 = g->finobjrold = NULL;
418 g->sweepgc = NULL; 418 g->sweepgc = NULL;
419 g->gray = g->grayagain = NULL; 419 g->gray = g->grayagain = NULL;
420 g->weak = g->ephemeron = g->allweak = NULL; 420 g->weak = g->ephemeron = g->allweak = NULL;
diff --git a/lstate.h b/lstate.h
index 0c545ec5..c02b4c8b 100644
--- a/lstate.h
+++ b/lstate.h
@@ -32,13 +32,20 @@
32** 32**
33** 'allgc' -> 'survival': new objects; 33** 'allgc' -> 'survival': new objects;
34** 'survival' -> 'old': objects that survived one collection; 34** 'survival' -> 'old': objects that survived one collection;
35** 'old' -> 'reallyold': objects that became old in last collection; 35** 'old1' -> 'reallyold': objects that became old in last collection;
36** 'reallyold' -> NULL: objects old for more than one cycle. 36** 'reallyold' -> NULL: objects old for more than one cycle.
37** 37**
38** 'finobj' -> 'finobjsur': new objects marked for finalization; 38** 'finobj' -> 'finobjsur': new objects marked for finalization;
39** 'finobjsur' -> 'finobjold': survived """"; 39** 'finobjsur' -> 'finobjold1': survived """";
40** 'finobjold' -> 'finobjrold': just old """"; 40** 'finobjold1' -> 'finobjrold': just old """";
41** 'finobjrold' -> NULL: really old """". 41** 'finobjrold' -> NULL: really old """".
42**
43** All lists can contain elements older than their main ages, due
44** to 'luaC_checkfinalizer' and 'udata2finalize', which move
45** objects between the normal lists and the "marked for finalization"
46** lists. Moreover, barriers can age young objects in young lists as
47** OLD0, which then become OLD1. However, a list never contains
48** elements younger than their main ages.
42*/ 49*/
43 50
44/* 51/*
@@ -257,10 +264,10 @@ typedef struct global_State {
257 GCObject *fixedgc; /* list of objects not to be collected */ 264 GCObject *fixedgc; /* list of objects not to be collected */
258 /* fields for generational collector */ 265 /* fields for generational collector */
259 GCObject *survival; /* start of objects that survived one GC cycle */ 266 GCObject *survival; /* start of objects that survived one GC cycle */
260 GCObject *old; /* start of old objects */ 267 GCObject *old1; /* start of old1 objects */
261 GCObject *reallyold; /* old objects with more than one cycle */ 268 GCObject *reallyold; /* objects more than one cycle old ("really old") */
262 GCObject *finobjsur; /* list of survival objects with finalizers */ 269 GCObject *finobjsur; /* list of survival objects with finalizers */
263 GCObject *finobjold; /* list of old objects with finalizers */ 270 GCObject *finobjold1; /* list of old1 objects with finalizers */
264 GCObject *finobjrold; /* list of really old objects with finalizers */ 271 GCObject *finobjrold; /* list of really old objects with finalizers */
265 struct lua_State *twups; /* list of threads with open upvalues */ 272 struct lua_State *twups; /* list of threads with open upvalues */
266 lua_CFunction panic; /* to be called in unprotected errors */ 273 lua_CFunction panic; /* to be called in unprotected errors */
diff --git a/ltests.c b/ltests.c
index a4e5d282..a13714d6 100644
--- a/ltests.c
+++ b/ltests.c
@@ -586,10 +586,10 @@ int lua_checkmemory (lua_State *L) {
586 586
587 /* check 'allgc' list */ 587 /* check 'allgc' list */
588 maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSswpallgc); 588 maybedead = (GCSatomic < g->gcstate && g->gcstate <= GCSswpallgc);
589 checklist(g, maybedead, 0, g->allgc, g->survival, g->old, g->reallyold); 589 checklist(g, maybedead, 0, g->allgc, g->survival, g->old1, g->reallyold);
590 590
591 /* check 'finobj' list */ 591 /* check 'finobj' list */
592 checklist(g, 0, 1, g->finobj, g->finobjsur, g->finobjold, g->finobjrold); 592 checklist(g, 0, 1, g->finobj, g->finobjsur, g->finobjold1, g->finobjrold);
593 593
594 /* check 'tobefnz' list */ 594 /* check 'tobefnz' list */
595 for (o = g->tobefnz; o != NULL; o = o->next) { 595 for (o = g->tobefnz; o != NULL; o = o->next) {