From 57cf387c0c7e321bb0696685d94e3b1c316c13c0 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Mon, 21 Dec 2009 11:52:49 +0000 Subject: [PATCH] Fixes to account for the new layout of MUT_ARR_PTRS (see #650) --- rts/sm/Compact.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c index 0a695ca..315eda7 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: -- 1.7.10.4