FIX #2164: check for ThreadRelocated in isAlive()
authorSimon Marlow <marlowsd@gmail.com>
Wed, 28 May 2008 06:39:04 +0000 (06:39 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 28 May 2008 06:39:04 +0000 (06:39 +0000)
rts/sm/GCAux.c

index 825d0f9..48179f7 100644 (file)
@@ -62,6 +62,11 @@ 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;
     }