aboutsummaryrefslogtreecommitdiff
path: root/lgc.c
diff options
context:
space:
mode:
Diffstat (limited to 'lgc.c')
-rw-r--r--lgc.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lgc.c b/lgc.c
index 5817f9ee..c01660ab 100644
--- a/lgc.c
+++ b/lgc.c
@@ -553,8 +553,12 @@ static lu_mem traversetable (global_State *g, Table *h) {
553 traverseweakvalue(g, h); 553 traverseweakvalue(g, h);
554 else if (!weakvalue) /* strong values? */ 554 else if (!weakvalue) /* strong values? */
555 traverseephemeron(g, h, 0); 555 traverseephemeron(g, h, 0);
556 else /* all weak */ 556 else { /* all weak */
557 linkgclist(h, g->allweak); /* nothing to traverse now */ 557 if (g->gcstate == GCSpropagate)
558 linkgclist(h, g->grayagain); /* must visit again its metatable */
559 else
560 linkgclist(h, g->allweak); /* must clear collected entries */
561 }
558 } 562 }
559 else /* not weak */ 563 else /* not weak */
560 traversestrongtable(g, h); 564 traversestrongtable(g, h);