diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-12-21 11:52:49 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-12-21 11:52:49 +0000 |
commit | 57cf387c0c7e321bb0696685d94e3b1c316c13c0 (patch) | |
tree | 2d4768e9e5d7d8908ed3eec9d15efc611488d870 /rts/sm | |
parent | 95a3e5532edfbf62cafa59067021d89d7e1c6852 (diff) | |
download | haskell-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.c | 23 |
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: |