X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FEvac.c;h=736c6c8d888a57a2af2cea966e594afe58fcc3a6;hb=e0ff87e4c56e8caf94b95e927ebd743ad3995a31;hp=f537e2b9a3c46f559b00fbbdcfcd30fbe97196a5;hpb=3e7ebef1f18e2718dd37f47613694de9ebf80ae2;p=ghc-hetmet.git diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c index f537e2b..736c6c8 100644 --- a/rts/sm/Evac.c +++ b/rts/sm/Evac.c @@ -212,7 +212,7 @@ spin: SET_EVACUAEE_FOR_LDV(from, size_to_reserve); // fill the slop if (size_to_reserve - size_to_copy > 0) - LDV_FILL_SLOP(to + size_to_copy - 1, (int)(size_to_reserve - size_to_copy)); + LDV_FILL_SLOP(to + size_to_copy, (int)(size_to_reserve - size_to_copy)); #endif return rtsTrue; @@ -837,6 +837,11 @@ selector_chain: if (bd->flags & BF_EVACUATED) { unchain_thunk_selectors(prev_thunk_selector, (StgClosure *)p); *q = (StgClosure *)p; + // shortcut, behave as for: if (evac) evacuate(q); + if (evac && bd->step < gct->evac_step) { + gct->failed_to_evac = rtsTrue; + TICK_GC_FAILED_PROMOTION(); + } return; } // we don't update THUNK_SELECTORS in the compacted