From deca030d34f5ca7f1e60d7a572f0a17066111a1f Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 21 Jul 2019 14:31:39 -0600 Subject: [PATCH] fix finalization pessimization Recurring during finalization marking could potentially delay finalization that should happen in the same collection. --- racket/src/racket/gc2/newgc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/racket/src/racket/gc2/newgc.c b/racket/src/racket/gc2/newgc.c index dd1b36c631..3f71e46af9 100644 --- a/racket/src/racket/gc2/newgc.c +++ b/racket/src/racket/gc2/newgc.c @@ -2672,10 +2672,13 @@ inline static int check_finalizers(NewGC *gc, int level, int old_gen, int fuel) if (!fuel) return 0; + GC_mark_no_recur(gc, 0); + GCDEBUG((DEBUGOUTF, "CFNL: Checking level %i finalizers\n", level)); while(work) { if (!fuel) { GC_ASSERT(old_gen); + GC_mark_no_recur(gc, 1); return 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; }