[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