diff options
Diffstat (limited to 'lgc.c')
-rw-r--r-- | lgc.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -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); |