diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-07-06 11:22:27 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-07-06 11:22:27 +0000 |
commit | dbdac3eb37da869f40adfa756616240ca293ed1c (patch) | |
tree | a2887d7640727b77ca36b0ad3dc1948064561331 /rts/sm | |
parent | b41067a9f85d660e42f2105a9484e7935fd02169 (diff) | |
download | haskell-dbdac3eb37da869f40adfa756616240ca293ed1c.tar.gz |
Fix generational GC bug (#3348)
Diffstat (limited to 'rts/sm')
-rw-r--r-- | rts/sm/Scav.c | 13 |
1 files changed, 0 insertions, 13 deletions
diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c index d5e9b12292..b850423244 100644 --- a/rts/sm/Scav.c +++ b/rts/sm/Scav.c @@ -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) |