[svn:parrot] r49511 - branches/generational_gc/src/gc
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon Oct 11 08:54:23 UTC 2010
Author: bacek
Date: Mon Oct 11 08:54:23 2010
New Revision: 49511
URL: https://trac.parrot.org/parrot/changeset/49511
Log:
Special handling for oldest 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 Mon Oct 11 08:54:03 2010 (r49510)
+++ branches/generational_gc/src/gc/gc_ms2.c Mon Oct 11 08:54:23 2010 (r49511)
@@ -732,10 +732,40 @@
| PObj_GC_generation_1_FLAG
| PObj_GC_generation_2_FLAG);
pmc->flags |= generation_to_flags(i+1);
+ }
+ }
+
+ tmp = next;
+ }
+ }
- /* Paint white for next cycle */
- PObj_live_CLEAR(pmc);
+ /* Handling oldest generation. Don't move it further */
+ if (gen >= 1) {
+ tmp = self->objects[2]->first;
+ while (tmp) {
+ PMC *pmc = LLH2Obj_typed(tmp, PMC);
+ List_Item_Header *next = tmp->next;
+
+ if (PObj_live_TEST(pmc)) {
+ /* "Seal" object with write barrier */
+ VTABLE *t = pmc->vtable;
+
+ if (!(t->flags & VTABLE_IS_WRITE_BARRIER_FLAG)) {
+ 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);
}
+
+ /* Move to older generation */
+ pmc->flags &= ~(PObj_GC_generation_0_FLAG
+ | PObj_GC_generation_1_FLAG
+ | PObj_GC_generation_2_FLAG);
+ pmc->flags |= generation_to_flags(2);
}
tmp = next;
More information about the parrot-commits
mailing list