[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