When linking a shared library with --make, always do the link step
[ghc-hetmet.git] / rts / sm / GCAux.c
index 825d0f9..c1ff541 100644 (file)
@@ -48,7 +48,7 @@ isAlive(StgClosure *p)
     // Problem here is that we sometimes don't set the link field, eg.
     // for static closures with an empty SRT or CONSTR_STATIC_NOCAFs.
     //
-    if (!HEAP_ALLOCED(q)) {
+    if (!HEAP_ALLOCED_GC(q)) {
        return p;
     }
 
@@ -62,11 +62,16 @@ isAlive(StgClosure *p)
 
     // large objects use the evacuated flag
     if (bd->flags & BF_LARGE) {
+        if (get_itbl(q)->type == TSO &&
+            ((StgTSO *)p)->what_next == ThreadRelocated) {
+            p = (StgClosure *)((StgTSO *)p)->_link;
+            continue;
+        }
        return NULL;
     }
 
     // check the mark bit for compacted steps
-    if ((bd->flags & BF_COMPACTED) && is_marked((P_)q,bd)) {
+    if ((bd->flags & BF_MARKED) && is_marked((P_)q,bd)) {
        return p;
     }