[svn:parrot] r49360 - branches/generational_gc/src/gc

bacek at svn.parrot.org bacek at svn.parrot.org
Tue Sep 28 09:45:46 UTC 2010


Author: bacek
Date: Tue Sep 28 09:45:45 2010
New Revision: 49360
URL: https://trac.parrot.org/parrot/changeset/49360

Log:
Move "write barriered" object back to young generation.

Modified:
   branches/generational_gc/src/gc/gc_ms2.c

Modified: branches/generational_gc/src/gc/gc_ms2.c
==============================================================================
--- branches/generational_gc/src/gc/gc_ms2.c	Tue Sep 28 05:19:55 2010	(r49359)
+++ branches/generational_gc/src/gc/gc_ms2.c	Tue Sep 28 09:45:45 2010	(r49360)
@@ -1308,8 +1308,16 @@
             if (PObj_is_PMC_TEST(obj)) {
                 PMC     *pmc = (PMC *)obj;
                 VTABLE  *t   = pmc->vtable;
+
+                PARROT_ASSERT(pmc->vtable);
+                PARROT_ASSERT(pmc->vtable->wb_variant_vtable);
+
                 pmc->vtable = pmc->vtable->wb_variant_vtable;
                 pmc->vtable->wb_variant_vtable = t;
+
+                PARROT_ASSERT(pmc->vtable != pmc->vtable->wb_variant_vtable);
+                PARROT_ASSERT(pmc->vtable != pmc->vtable->ro_variant_vtable);
+
             }
         }
         else {
@@ -1640,8 +1648,18 @@
     ASSERT_ARGS(gc_ms2_write_barrier)
     MarkSweep_GC     *self = (MarkSweep_GC *)interp->gc_sys->gc_private;
     List_Item_Header *item = Obj2LLH(pmc);
+    size_t            gen  = PObj_to_generation(pmc);
+
+    if (PObj_is_live_or_free_TESTALL(pmc))
+        return;
+
+    if (!gen)
+        return;
+
     LIST_REMOVE(self->objects[PObj_to_generation(pmc)], item);
     LIST_APPEND(self->root_objects, item);
+    pmc->flags &= ~(PObj_GC_generation_0_FLAG | PObj_GC_generation_1_FLAG);
+    PObj_live_SET(pmc);
 }
 
 /*


More information about the parrot-commits mailing list