From da01c3149a07d0e1dc021dfc037eb10853024ee3 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Fri, 4 Dec 2009 11:10:37 +0000 Subject: [PATCH] evaluate_large: evaluate large objects to bd->dest rather than gen->to This fixes aging of large objects in the new scheme. Bug found by perf/space_leaks/space_leak_001. Yay perf regressions tests. --- rts/sm/Evac.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c index 93d5d58..db24909 100644 --- a/rts/sm/Evac.c +++ b/rts/sm/Evac.c @@ -239,10 +239,11 @@ copy(StgClosure **p, const StgInfoTable *info, STATIC_INLINE void evacuate_large(StgPtr p) { - bdescr *bd = Bdescr(p); + bdescr *bd; generation *gen, *new_gen; gen_workspace *ws; + bd = Bdescr(p); gen = bd->gen; ACQUIRE_SPIN_LOCK(&gen->sync_large_objects); @@ -271,7 +272,7 @@ evacuate_large(StgPtr p) /* link it on to the evacuated large object list of the destination gen */ - new_gen = gen->to; + new_gen = bd->dest; if (new_gen < gct->evac_gen) { if (gct->eager_promotion) { new_gen = gct->evac_gen; -- 1.7.10.4