X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=rts%2Fsm%2FCompact.c;h=7f3bb29580a930118e5d968e0bc767277a5e65d8;hb=4318aa600015f0d7b4d977cb67071f3f8e7c3b0b;hp=ced8df36ae3fd1535edbad069bdfc1feac361730;hpb=77798610bc585a1eea3b6695c4a3fee1ccba70ba;p=ghc-hetmet.git diff --git a/rts/sm/Compact.c b/rts/sm/Compact.c index ced8df3..7f3bb29 100644 --- a/rts/sm/Compact.c +++ b/rts/sm/Compact.c @@ -84,7 +84,7 @@ thread (StgClosure **p) if (HEAP_ALLOCED(q)) { bd = Bdescr(q); - if (bd->flags & BF_COMPACTED) + if (bd->flags & BF_MARKED) { iptr = *q; switch (GET_CLOSURE_TAG((StgClosure *)iptr)) @@ -464,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 @@ -966,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); @@ -986,11 +989,16 @@ 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); + // the blackhole queue + thread((void *)&blackhole_queue); + // the task list { Task *task;