[svn:parrot] r47207 - branches/gc_massacre/src/gc
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon May 31 10:21:30 UTC 2010
Author: bacek
Date: Mon May 31 10:21:30 2010
New Revision: 47207
URL: https://trac.parrot.org/parrot/changeset/47207
Log:
Don't remark grey objects.
Modified:
branches/gc_massacre/src/gc/gc_tms.c
Modified: branches/gc_massacre/src/gc/gc_tms.c
==============================================================================
--- branches/gc_massacre/src/gc/gc_tms.c Mon May 31 10:20:53 2010 (r47206)
+++ branches/gc_massacre/src/gc/gc_tms.c Mon May 31 10:21:30 2010 (r47207)
@@ -623,6 +623,7 @@
ASSERT_ARGS(gc_tms_mark_and_sweep)
TriColor_GC *self = (TriColor_GC *)interp->gc_sys->gc_private;
List_Item_Header *tmp;
+ size_t counter;
UNUSED(flags);
/* GC is blocked */
@@ -639,26 +640,30 @@
self->objects = Parrot_gc_allocate_linked_list(interp);
self->grey_objects = Parrot_gc_allocate_linked_list(interp);
- //fprintf(stderr, "Before %d\n", self->dead_objects->count);
+ fprintf(stderr, "Before %d\n", self->dead_objects->count);
/*
self.grey_objects = self.trace_roots();
*/
Parrot_gc_trace_root(interp, NULL, GC_TRACE_FULL);
- //fprintf(stderr, "Roots %d\n", self->grey_objects->count);
+ fprintf(stderr, "Roots %d\n", self->grey_objects->count);
/*
# mark_alive will push into self.grey_objects
self.mark_real($_) for self.grey_objects;
*/
tmp = self->grey_objects->first;
+ counter = 0;
while (tmp) {
List_Item_Header *next = tmp->next;
gc_tms_real_mark_pmc(interp, self, tmp);
tmp = next;
+ ++counter;
}
+ fprintf(stderr, "Processed grey: %d\n", counter);
+
/*
# Sweep
for self.dead_objects -> $dead {
@@ -666,12 +671,16 @@
self.allocator.free($dead);
}
*/
+ fprintf(stderr, "Killing %d\n", self->dead_objects->count);
tmp = self->dead_objects->first;
+ counter = 0;
while (tmp) {
List_Item_Header *next = tmp->next;
Parrot_gc_pool_free(self->pmc_allocator, tmp);
tmp = next;
+ ++counter;
}
+ fprintf(stderr, "Processed dead %d\n", counter);
fprintf(stderr, "Survived %d\n", self->objects->count);
fprintf(stderr, "Dead %d\n", self->dead_objects->count);
@@ -697,11 +706,12 @@
ASSERT_ARGS(gc_tms_mark_pmc_header)
TriColor_GC *self = (TriColor_GC *)interp->gc_sys->gc_private;
List_Item_Header *item = Obj2LLH(pmc);
- if (PObj_is_live_or_free_TESTALL(pmc))
+ if (PObj_is_live_or_free_TESTALL(pmc) || PObj_grey_TEST(pmc))
return;
/* "constant" objects aren't managed by GC at all. */
if (PObj_constant_TEST(pmc))
return;
+ PObj_grey_SET(pmc);
Parrot_gc_list_remove(interp, self->dead_objects, item);
Parrot_gc_list_append(interp, self->grey_objects, item);
}
@@ -715,6 +725,7 @@
Parrot_gc_list_remove(interp, self->grey_objects, li);
/* self.SUPER.mark($obj) */
Parrot_gc_list_append(interp, self->objects, li);
+ PObj_grey_CLEAR(LLH2Obj_typed(li, PMC));
gc_ms_mark_pmc_header(interp, LLH2Obj_typed(li, PMC));
}
More information about the parrot-commits
mailing list