summaryrefslogtreecommitdiff
path: root/rts/sm
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-12-21 11:52:49 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-12-21 11:52:49 +0000
commit57cf387c0c7e321bb0696685d94e3b1c316c13c0 (patch)
tree2d4768e9e5d7d8908ed3eec9d15efc611488d870 /rts/sm
parent95a3e5532edfbf62cafa59067021d89d7e1c6852 (diff)
downloadhaskell-57cf387c0c7e321bb0696685d94e3b1c316c13c0.tar.gz
Fixes to account for the new layout of MUT_ARR_PTRS (see #650)
Diffstat (limited to 'rts/sm')
-rw-r--r--rts/sm/Compact.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c
index 0a695ca078..315eda732d 100644
--- a/rts/sm/Compact.c
+++ b/rts/sm/Compact.c
@@ -511,13 +511,13 @@ update_fwd_large( bdescr *bd )
case MUT_ARR_PTRS_FROZEN0:
// follow everything
{
- StgPtr next;
+ StgMutArrPtrs *a;
- next = p + mut_arr_ptrs_sizeW((StgMutArrPtrs*)p);
- for (p = (P_)((StgMutArrPtrs *)p)->payload; p < next; p++) {
- thread((StgClosure **)p);
- }
- continue;
+ a = (StgMutArrPtrs*)p;
+ for (p = (P_)a->payload; p < (P_)&a->payload[a->ptrs]; p++) {
+ thread((StgClosure **)p);
+ }
+ continue;
}
case TSO:
@@ -692,13 +692,14 @@ thread_obj (StgInfoTable *info, StgPtr p)
case MUT_ARR_PTRS_FROZEN0:
// follow everything
{
- StgPtr next;
-
- next = p + mut_arr_ptrs_sizeW((StgMutArrPtrs*)p);
- for (p = (P_)((StgMutArrPtrs *)p)->payload; p < next; p++) {
+ StgMutArrPtrs *a;
+
+ a = (StgMutArrPtrs *)p;
+ for (p = (P_)a->payload; p < (P_)&a->payload[a->ptrs]; p++) {
thread((StgClosure **)p);
}
- return p;
+
+ return (StgPtr)a + mut_arr_ptrs_sizeW(a);
}
case TSO: