Fix generational GC bug (#3348)
authorSimon Marlow <marlowsd@gmail.com>
Mon, 6 Jul 2009 11:22:27 +0000 (11:22 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Mon, 6 Jul 2009 11:22:27 +0000 (11:22 +0000)
rts/sm/Scav.c

index d5e9b12..b850423 100644 (file)
@@ -1364,20 +1364,7 @@ scavenge_one(StgPtr p)
     case IND_OLDGEN:
     case IND_OLDGEN_PERM:
     case IND_STATIC:
-    {
-       /* Careful here: a THUNK can be on the mutable list because
-        * it contains pointers to young gen objects.  If such a thunk
-        * is updated, the IND_OLDGEN will be added to the mutable
-        * list again, and we'll scavenge it twice.  evacuate()
-        * doesn't check whether the object has already been
-        * evacuated, so we perform that check here.
-        */
-       StgClosure *q = ((StgInd *)p)->indirectee;
-       if (HEAP_ALLOCED_GC(q) && Bdescr((StgPtr)q)->flags & BF_EVACUATED) {
-           break;
-       }
        evacuate(&((StgInd *)p)->indirectee);
-    }
 
 #if 0 && defined(DEBUG)
       if (RtsFlags.DebugFlags.gc)