fix finalization pessimization

Recurring during finalization marking could potentially delay
finalization that should happen in the same collection.
This commit is contained in:
Matthew Flatt 2019-07-21 14:31:39 -06:00
parent 93f4c9226b
commit deca030d34

View File

@ -2672,10 +2672,13 @@ inline static int check_finalizers(NewGC *gc, int level, int old_gen, int fuel)
if (!fuel) return 0; if (!fuel) return 0;
GC_mark_no_recur(gc, 0);
GCDEBUG((DEBUGOUTF, "CFNL: Checking level %i finalizers\n", level)); GCDEBUG((DEBUGOUTF, "CFNL: Checking level %i finalizers\n", level));
while(work) { while(work) {
if (!fuel) { if (!fuel) {
GC_ASSERT(old_gen); GC_ASSERT(old_gen);
GC_mark_no_recur(gc, 1);
return 0; return 0;
} }
if (fuel > 0) { if (fuel > 0) {
@ -2742,6 +2745,8 @@ inline static int check_finalizers(NewGC *gc, int level, int old_gen, int fuel)
} }
} }
GC_mark_no_recur(gc, 1);
return fuel; return fuel;
} }