[svn:parrot] r41027 - in branches/gc-refactor: include/parrot src/gc
jrtayloriv at svn.parrot.org
jrtayloriv at svn.parrot.org
Sun Sep 6 00:36:25 UTC 2009
Author: jrtayloriv
Date: Sun Sep 6 00:36:25 2009
New Revision: 41027
URL: https://trac.parrot.org/parrot/changeset/41027
Log:
Moved Arena function pointers into GC_Subsystem struct, and tidied up a bit in various places
Modified:
branches/gc-refactor/include/parrot/pobj.h
branches/gc-refactor/src/gc/api.c
branches/gc-refactor/src/gc/gc_inf.c
branches/gc-refactor/src/gc/gc_ms.c
branches/gc-refactor/src/gc/gc_private.h
branches/gc-refactor/src/gc/generational_ms.c
branches/gc-refactor/src/gc/incremental_ms.c
branches/gc-refactor/src/gc/mark_sweep.c
Modified: branches/gc-refactor/include/parrot/pobj.h
==============================================================================
--- branches/gc-refactor/include/parrot/pobj.h Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/include/parrot/pobj.h Sun Sep 6 00:36:25 2009 (r41027)
@@ -316,14 +316,6 @@
#define PObj_custom_destroy_TEST(o) PObj_flag_TEST(custom_destroy, o)
#define PObj_custom_destroy_CLEAR(o) PObj_flag_CLEAR(custom_destroy, o)
-/*******************************************************
- * DEPRECATED -- use PObj_custom_destroy_FOO() instead *
- *******************************************************/
-#define PObj_active_destroy_FLAG PObj_custom_destroy_FLAG
-#define PObj_active_destroy_SET(o) PObj_flag_SET(custom_destroy, o)
-#define PObj_active_destroy_TEST(o) PObj_flag_TEST(custom_destroy, o)
-#define PObj_active_destroy_CLEAR(o) PObj_flag_CLEAR(custom_destroy, o)
-
#define PObj_is_class_SET(o) PObj_flag_SET(is_class, o)
#define PObj_is_class_TEST(o) PObj_flag_TEST(is_class, o)
#define PObj_is_class_CLEAR(o) PObj_flag_CLEAR(is_class, o)
@@ -367,6 +359,15 @@
PObj_custom_destroy_SET(o); \
} while (0)
+/*******************************************************
+ * DEPRECATED -- use PObj_custom_destroy_FOO() instead *
+ *******************************************************/
+#define PObj_active_destroy_FLAG PObj_custom_destroy_FLAG
+#define PObj_active_destroy_SET(o) PObj_flag_SET(custom_destroy, o)
+#define PObj_active_destroy_TEST(o) PObj_flag_TEST(custom_destroy, o)
+#define PObj_active_destroy_CLEAR(o) PObj_flag_CLEAR(custom_destroy, o)
+
+
#endif /* PARROT_POBJ_H_GUARD */
/*
Modified: branches/gc-refactor/src/gc/api.c
==============================================================================
--- branches/gc-refactor/src/gc/api.c Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/api.c Sun Sep 6 00:36:25 2009 (r41027)
@@ -325,8 +325,8 @@
Parrot_gc_finalize(PARROT_INTERP)
{
ASSERT_ARGS(Parrot_gc_finalize)
- if (interp->arena_base->finalize_gc_system)
- interp->arena_base->finalize_gc_system(interp);
+ if (interp->gc_sys->finalize_gc_system)
+ interp->gc_sys->finalize_gc_system(interp);
}
@@ -817,7 +817,7 @@
Parrot_gc_mark_and_sweep(PARROT_INTERP, UINTVAL flags)
{
ASSERT_ARGS(Parrot_gc_mark_and_sweep)
- interp->arena_base->do_gc_mark(interp, flags);
+ interp->gc_sys->do_gc_mark(interp, flags);
}
/*
Modified: branches/gc-refactor/src/gc/gc_inf.c
==============================================================================
--- branches/gc-refactor/src/gc/gc_inf.c Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/gc_inf.c Sun Sep 6 00:36:25 2009 (r41027)
@@ -259,11 +259,10 @@
Parrot_gc_inf_init(PARROT_INTERP)
{
ASSERT_ARGS(Parrot_gc_inf_init)
- Arenas * const arena_base = interp->arena_base;
- arena_base->do_gc_mark = gc_inf_mark_and_sweep;
- arena_base->finalize_gc_system = NULL;
- arena_base->init_pool = gc_inf_pool_init;
+ interp->gc_sys->do_gc_mark = gc_inf_mark_and_sweep;
+ interp->gc_sys->finalize_gc_system = NULL;
+ interp->gc_sys->init_pool = gc_inf_pool_init;
}
Modified: branches/gc-refactor/src/gc/gc_ms.c
==============================================================================
--- branches/gc-refactor/src/gc/gc_ms.c Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/gc_ms.c Sun Sep 6 00:36:25 2009 (r41027)
@@ -123,11 +123,10 @@
Parrot_gc_ms_init(PARROT_INTERP)
{
ASSERT_ARGS(Parrot_gc_ms_init)
- Arenas * const arena_base = interp->arena_base;
- arena_base->do_gc_mark = gc_ms_mark_and_sweep;
- arena_base->finalize_gc_system = NULL;
- arena_base->init_pool = gc_ms_pool_init;
+ interp->gc_sys->do_gc_mark = gc_ms_mark_and_sweep;
+ interp->gc_sys->finalize_gc_system = NULL;
+ interp->gc_sys->init_pool = gc_ms_pool_init;
}
Modified: branches/gc-refactor/src/gc/gc_private.h
==============================================================================
--- branches/gc-refactor/src/gc/gc_private.h Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/gc_private.h Sun Sep 6 00:36:25 2009 (r41027)
@@ -98,15 +98,19 @@
union { /* Holds system-specific data structures*/
struct gc_gms_sys_data gms_data;
} gc_sys_data;
+
+ /** Function hooks that each subsystem MUST provide */
+ void (*do_gc_mark)(PARROT_INTERP, UINTVAL flags);
+ void (*finalize_gc_system) (PARROT_INTERP);
+ void (*init_pool)(PARROT_INTERP, struct Fixed_Size_Obj_Pool *);
- /*Function hooks that GC systems can choose if they want
- *These will be called from the GC API function */
+ /*Function hooks that GC systems can CHOOSE to provide
+ *These will be called from the GC API function Parrot_gc_func_name */
void (*write_barrier)(PARROT_INTERP, PMC *, PMC *, PMC *);
void (*write_barrier_key)(PARROT_INTERP, PMC *, PMC *, PObj *, PMC *, PObj *);
/* functions used in arena scan code to convert from object pointers
* to arena pointers ... GMS only I think ...*/
-
void * (*PObj_to_Arena)(const void *);
PObj * (*Arena_to_PObj)(void *);
@@ -201,15 +205,8 @@
PMC_Attribute_Pool **attrib_pools;
size_t num_attribs;
- /*
- * function slots that each subsystem must provide
- */
- void (*do_gc_mark)(PARROT_INTERP, UINTVAL flags);
- void (*finalize_gc_system) (PARROT_INTERP);
- void (*init_pool)(PARROT_INTERP, struct Fixed_Size_Obj_Pool *);
- /*
- * statistics for GC
- */
+
+ /** statistics for GC **/
size_t gc_mark_runs; /* Number of times we've done a mark run*/
size_t gc_lazy_mark_runs; /* Number of successful lazy mark runs */
size_t gc_collect_runs; /* Number of times we've done a memory
Modified: branches/gc-refactor/src/gc/generational_ms.c
==============================================================================
--- branches/gc-refactor/src/gc/generational_ms.c Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/generational_ms.c Sun Sep 6 00:36:25 2009 (r41027)
@@ -569,9 +569,9 @@
/*
* set function hooks according to pdd09
*/
- arena_base->do_gc_mark = parrot_gc_gms_run;
- arena_base->finalize_gc_system = parrot_gc_gms_deinit;
- arena_base->init_pool = gc_gms_pool_init;
+ interp->gc_sys->do_gc_mark = parrot_gc_gms_run;
+ interp->gc_sys->finalize_gc_system = parrot_gc_gms_deinit;
+ interp->gc_sys->init_pool = gc_gms_pool_init;
}
Modified: branches/gc-refactor/src/gc/incremental_ms.c
==============================================================================
--- branches/gc-refactor/src/gc/incremental_ms.c Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/incremental_ms.c Sun Sep 6 00:36:25 2009 (r41027)
@@ -502,6 +502,114 @@
} Gc_ims_private;
+
+/*
+
+=item C<void Parrot_gc_ims_init(PARROT_INTERP)>
+
+Initialize the state structures of the gc system. Called immediately before
+creation of memory pools. This function must set the function pointers
+for C<add_free_object_fn>, C<get_free_object_fn>, C<alloc_objects_fn>, and
+C<more_objects_fn>.
+
+=cut
+
+*/
+
+void
+Parrot_gc_ims_init(PARROT_INTERP)
+{
+ ASSERT_ARGS(Parrot_gc_ims_init)
+ Arenas * const arena_base = interp->arena_base;
+ arena_base->gc_private = mem_allocate_zeroed_typed(Gc_ims_private);
+
+ /* set function hooks according to pdd09 */
+
+ interp->gc_sys->do_gc_mark = parrot_gc_ims_run;
+ interp->gc_sys->finalize_gc_system = parrot_gc_ims_deinit;
+ interp->gc_sys->init_pool = gc_ims_pool_init;
+
+ /* run init state */
+ parrot_gc_ims_run_increment(interp);
+}
+
+
+/*
+
+=item C<static void gc_ims_pool_init(PARROT_INTERP, Fixed_Size_Obj_Pool *pool)>
+
+Initializes a pool by setting the appropriate function pointers to add, get,
+and allocate objects.
+
+=cut
+
+*/
+
+static void
+gc_ims_pool_init(SHIM_INTERP, ARGMOD(Fixed_Size_Obj_Pool *pool))
+{
+ ASSERT_ARGS(gc_ims_pool_init)
+ pool->add_free_object = gc_ims_add_free_object;
+ pool->get_free_object = gc_ims_get_free_object;
+ pool->alloc_objects = gc_ims_alloc_objects;
+ pool->more_objects = pool->alloc_objects;
+}
+
+
+/*
+
+=item C<static void parrot_gc_ims_deinit(PARROT_INTERP)>
+
+Shuts down this GC system.
+
+=cut
+
+*/
+
+static void
+parrot_gc_ims_deinit(PARROT_INTERP)
+{
+ ASSERT_ARGS(parrot_gc_ims_deinit)
+ Arenas * const arena_base = interp->arena_base;
+
+ mem_sys_free(arena_base->gc_private);
+ arena_base->gc_private = NULL;
+}
+
+
+
+/*
+
+=item C<static void parrot_gc_ims_reinit(PARROT_INTERP)>
+
+Reinitialize the collector for the next collection cycle.
+
+=cut
+
+*/
+
+static void
+parrot_gc_ims_reinit(PARROT_INTERP)
+{
+ ASSERT_ARGS(parrot_gc_ims_reinit)
+ Gc_ims_private *g_ims;
+ Arenas * const arena_base = interp->arena_base;
+
+ arena_base->lazy_gc = 0;
+ Parrot_gc_run_init(interp);
+
+ /*
+ * trace root set w/o system areas
+ * TODO also skip volatile roots
+ */
+ Parrot_gc_trace_root(interp, GC_TRACE_ROOT_ONLY);
+
+ g_ims = (Gc_ims_private *)arena_base->gc_private;
+ g_ims->state = GC_IMS_MARKING;
+
+}
+
+
/*
=item C<static void gc_ims_add_free_object(PARROT_INTERP, Fixed_Size_Obj_Pool
@@ -607,112 +715,6 @@
/*
-=item C<static void gc_ims_pool_init(PARROT_INTERP, Fixed_Size_Obj_Pool *pool)>
-
-Initializes a pool by setting the appropriate function pointers to add, get,
-and allocate objects.
-
-=cut
-
-*/
-
-static void
-gc_ims_pool_init(SHIM_INTERP, ARGMOD(Fixed_Size_Obj_Pool *pool))
-{
- ASSERT_ARGS(gc_ims_pool_init)
- pool->add_free_object = gc_ims_add_free_object;
- pool->get_free_object = gc_ims_get_free_object;
- pool->alloc_objects = gc_ims_alloc_objects;
- pool->more_objects = pool->alloc_objects;
-}
-
-
-/*
-
-=item C<static void parrot_gc_ims_deinit(PARROT_INTERP)>
-
-Shuts down this GC system.
-
-=cut
-
-*/
-
-static void
-parrot_gc_ims_deinit(PARROT_INTERP)
-{
- ASSERT_ARGS(parrot_gc_ims_deinit)
- Arenas * const arena_base = interp->arena_base;
-
- mem_sys_free(arena_base->gc_private);
- arena_base->gc_private = NULL;
-}
-
-
-/*
-
-=item C<void Parrot_gc_ims_init(PARROT_INTERP)>
-
-Initialize the state structures of the gc system. Called immediately before
-creation of memory pools. This function must set the function pointers
-for C<add_free_object_fn>, C<get_free_object_fn>, C<alloc_objects_fn>, and
-C<more_objects_fn>.
-
-=cut
-
-*/
-
-void
-Parrot_gc_ims_init(PARROT_INTERP)
-{
- ASSERT_ARGS(Parrot_gc_ims_init)
- Arenas * const arena_base = interp->arena_base;
- arena_base->gc_private = mem_allocate_zeroed_typed(Gc_ims_private);
-
- /* set function hooks according to pdd09 */
-
- arena_base->do_gc_mark = parrot_gc_ims_run;
- arena_base->finalize_gc_system = parrot_gc_ims_deinit;
- arena_base->init_pool = gc_ims_pool_init;
-
- /* run init state */
- parrot_gc_ims_run_increment(interp);
-}
-
-
-/*
-
-=item C<static void parrot_gc_ims_reinit(PARROT_INTERP)>
-
-Reinitialize the collector for the next collection cycle.
-
-=cut
-
-*/
-
-static void
-parrot_gc_ims_reinit(PARROT_INTERP)
-{
- ASSERT_ARGS(parrot_gc_ims_reinit)
- Gc_ims_private *g_ims;
- Arenas * const arena_base = interp->arena_base;
-
- arena_base->lazy_gc = 0;
- Parrot_gc_run_init(interp);
-
- /*
- * trace root set w/o system areas
- * TODO also skip volatile roots
- */
- Parrot_gc_trace_root(interp, GC_TRACE_ROOT_ONLY);
-
- g_ims = (Gc_ims_private *)arena_base->gc_private;
- g_ims->state = GC_IMS_MARKING;
-
-}
-
-
-/*
-
=item C<static void parrot_gc_ims_mark(PARROT_INTERP)>
Mark a bunch of children.
Modified: branches/gc-refactor/src/gc/mark_sweep.c
==============================================================================
--- branches/gc-refactor/src/gc/mark_sweep.c Sun Sep 6 00:30:42 2009 (r41026)
+++ branches/gc-refactor/src/gc/mark_sweep.c Sun Sep 6 00:36:25 2009 (r41027)
@@ -749,7 +749,7 @@
pmc_pool->mem_pool = NULL;
pmc_pool->gc_object = free_pmc_in_pool;
- (interp->arena_base->init_pool)(interp, pmc_pool);
+ (interp->gc_sys->init_pool)(interp, pmc_pool);
return pmc_pool;
}
@@ -812,7 +812,7 @@
#endif
pool->mem_pool = interp->arena_base->memory_pool;
- (interp->arena_base->init_pool)(interp, pool);
+ (interp->gc_sys->init_pool)(interp, pool);
return pool;
}
More information about the parrot-commits
mailing list