X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FCompact.c;h=9f0a69d1d1258f89654ed51b0c44a5943ec20c89;hb=74ee9df9f9e79e7110e9d8541b84010f35c464c5;hp=8e5dd648125cf8b13273275e33c3a2d34b9fd29c;hpb=f86e7206ea94b48b94fb61007a1c5d55b8c60f45;p=ghc-hetmet.git diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c index 8e5dd64..9f0a69d 100644 --- a/rts/sm/Compact.c +++ b/rts/sm/Compact.c @@ -1,6 +1,6 @@ /* ----------------------------------------------------------------------------- * - * (c) The GHC Team 2001-2006 + * (c) The GHC Team 2001-2008 * * Compacting garbage collector * @@ -83,11 +83,8 @@ thread (StgClosure **p) if (HEAP_ALLOCED(q)) { bd = Bdescr(q); - // a handy way to discover whether the ptr is into the - // compacted area of the old gen, is that the EVACUATED flag - // is zero (it's non-zero for all the other areas of live - // memory). - if ((bd->flags & BF_EVACUATED) == 0) + + if (bd->flags & BF_MARKED) { iptr = *q; switch (GET_CLOSURE_TAG((StgClosure *)iptr)) @@ -467,7 +464,7 @@ thread_AP_STACK (StgAP_STACK *ap) static StgPtr thread_TSO (StgTSO *tso) { - thread_(&tso->link); + thread_(&tso->_link); thread_(&tso->global_link); if ( tso->why_blocked == BlockedOnMVar @@ -969,6 +966,9 @@ compact(StgClosure *static_objects) // 1. thread the roots markCapabilities((evac_fn)thread_root, NULL); + // spark queues + traverseSparkQueues((evac_fn)thread_root, NULL); + // the weak pointer lists... if (weak_ptr_list != NULL) { thread((void *)&weak_ptr_list); @@ -989,7 +989,9 @@ compact(StgClosure *static_objects) } // the global thread list - thread((void *)&all_threads); + for (s = 0; s < total_steps; s++) { + thread((void *)&all_steps[s].threads); + } // any threads resurrected during this GC thread((void *)&resurrected_threads);