diff options
author | Simon Marlow <marlowsd@gmail.com> | 2008-09-12 13:04:04 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2008-09-12 13:04:04 +0000 |
commit | b562c2cb4e7a77387ac177f43680506c52c2bb95 (patch) | |
tree | 1dfe3e4522ee952fcc2e825ddfa29fe1bd46530a | |
parent | 81af806b823c3dd633a7c102b1fa6afbf89f16ef (diff) | |
download | haskell-b562c2cb4e7a77387ac177f43680506c52c2bb95.tar.gz |
Fix #2586, bug in THUNK_SELECTORs (again)
This time, we had forgetten the write barrier in one place.
-rw-r--r-- | rts/sm/Evac.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c index 9b42fc12be..736c6c8d88 100644 --- a/rts/sm/Evac.c +++ b/rts/sm/Evac.c @@ -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 |