/* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.70 2000/01/14 13:17:15 hwloidl Exp $
+ * $Id: GC.c,v 1.72 2000/01/22 18:00:03 simonmar Exp $
*
* (c) The GHC Team 1998-1999
*
StgClosure *
MarkRoot(StgClosure *root)
{
- //if (root != END_TSO_QUEUE)
return evacuate(root);
}
case TSO:
{
- StgTSO *tso = stgCast(StgTSO *,q);
+ StgTSO *tso = (StgTSO *)q;
nat size = tso_sizeW(tso);
int diff;
+ /* Deal with redirected TSOs (a TSO that's had its stack enlarged).
+ */
+ if (tso->whatNext == ThreadRelocated) {
+ q = (StgClosure *)tso->link;
+ goto loop;
+ }
+
/* Large TSOs don't get moved, so no relocation is required.
*/
if (size >= LARGE_OBJECT_THRESHOLD/sizeof(W_)) {
threadLazyBlackHole(tso);
}
+/* -----------------------------------------------------------------------------
+ * Debugging
+ * -------------------------------------------------------------------------- */
+
#if DEBUG
//@cindex printMutOnceList
void
printMutOnceList(generation *gen)
{
- StgMutClosure *p, *next, *new_list;
+ StgMutClosure *p, *next;
p = gen->mut_once_list;
- new_list = END_MUT_LIST;
next = p->mut_link;
- evac_gen = gen->no;
- failed_to_evac = rtsFalse;
-
fprintf(stderr, "@@ Mut once list %p: ", gen->mut_once_list);
for (; p != END_MUT_LIST; p = next, next = p->mut_link) {
fprintf(stderr, "%p (%s), ",
p = gen->saved_mut_list;
next = p->mut_link;
- evac_gen = 0;
- failed_to_evac = rtsFalse;
-
fprintf(stderr, "@@ Mutable list %p: ", gen->saved_mut_list);
for (; p != END_MUT_LIST; p = next, next = p->mut_link) {
- fprintf(stderr, "%p (%s), ",
+ fprintf(stderr, "%p (%s), ",
p, info_type((StgClosure *)p));
}
fputc('\n', stderr);