summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2008-09-12 13:04:04 +0000
committerSimon Marlow <marlowsd@gmail.com>2008-09-12 13:04:04 +0000
commitb562c2cb4e7a77387ac177f43680506c52c2bb95 (patch)
tree1dfe3e4522ee952fcc2e825ddfa29fe1bd46530a
parent81af806b823c3dd633a7c102b1fa6afbf89f16ef (diff)
downloadhaskell-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.c5
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