((StgStack *)c)->stack + ((StgStack *)c)->stack_size);
goto loop;
+ case TSO:
+ {
+ StgTSO *tso = (StgTSO *)c;
+
+ retainClosure(tso->stackobj, c, c_child_r);
+ retainClosure(tso->blocked_exceptions, c, c_child_r);
+ retainClosure(tso->bq, c, c_child_r);
+ retainClosure(tso->trec, c, c_child_r);
+ if ( tso->why_blocked == BlockedOnMVar
+ || tso->why_blocked == BlockedOnBlackHole
+ || tso->why_blocked == BlockedOnMsgThrowTo
+ ) {
+ retainClosure(tso->block_info.closure, c, c_child_r);
+ }
+ goto loop;
+ }
+
case PAP:
{
StgPAP *pap = (StgPAP *)c;
{
StgWeak *weak;
RetainerSet *rtl;
- nat g;
+ nat g, n;
StgPtr ml;
bdescr *bd;
#ifdef DEBUG_RETAINER
// Traversing through mut_list is necessary
// because we can find MUT_VAR objects which have not been
// visited during retainer profiling.
- for (bd = generations[g].mut_list; bd != NULL; bd = bd->link) {
+ for (n = 0; n < n_capabilities; n++) {
+ for (bd = capabilities[n].mut_lists[g]; bd != NULL; bd = bd->link) {
for (ml = bd->start; ml < bd->free; ml++) {
maybeInitRetainerSet((StgClosure *)*ml);
}
#endif
}
- }
+ }
+ }
}
}