From: Simon Marlow Date: Fri, 4 Dec 2009 11:10:37 +0000 (+0000) Subject: evaluate_large: evaluate large objects to bd->dest rather than gen->to X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=da01c3149a07d0e1dc021dfc037eb10853024ee3 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. --- 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;