[svn:parrot] r43449 - branches/gc_encapsulate/src/gc

bacek at svn.parrot.org bacek at svn.parrot.org
Wed Jan 13 22:07:37 UTC 2010


Author: bacek
Date: Wed Jan 13 22:07:37 2010
New Revision: 43449
URL: https://trac.parrot.org/parrot/changeset/43449

Log:
Implement GC MS mark/sweep block/unblock

Modified:
   branches/gc_encapsulate/src/gc/api.c
   branches/gc_encapsulate/src/gc/gc_ms.c

Modified: branches/gc_encapsulate/src/gc/api.c
==============================================================================
--- branches/gc_encapsulate/src/gc/api.c	Wed Jan 13 22:07:17 2010	(r43448)
+++ branches/gc_encapsulate/src/gc/api.c	Wed Jan 13 22:07:37 2010	(r43449)
@@ -968,7 +968,6 @@
     ASSERT_ARGS(Parrot_block_GC_mark)
     if (interp->gc_sys->block_gc_mark)
         interp->gc_sys->block_gc_mark(interp);
-    //interp->mem_pools->gc_mark_block_level++;
     Parrot_shared_gc_block(interp);
 }
 
@@ -980,9 +979,6 @@
     if (interp->gc_sys->unblock_gc_mark)
         interp->gc_sys->unblock_gc_mark(interp);
     Parrot_shared_gc_unblock(interp);
-    //if (interp->mem_pools->gc_mark_block_level) {
-    //    interp->mem_pools->gc_mark_block_level--;
-    //}
 }
 
 PARROT_EXPORT
@@ -990,7 +986,6 @@
 Parrot_block_GC_sweep(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_block_GC_sweep)
-    //interp->mem_pools->gc_sweep_block_level++;
     if (interp->gc_sys->block_gc_sweep)
         interp->gc_sys->block_gc_sweep(interp);
 }
@@ -1002,8 +997,6 @@
     ASSERT_ARGS(Parrot_unblock_GC_sweep)
     if (interp->gc_sys->unblock_gc_sweep)
         interp->gc_sys->unblock_gc_sweep(interp);
-    //if (interp->mem_pools->gc_sweep_block_level)
-    //    interp->mem_pools->gc_sweep_block_level--;
 }
 
 PARROT_EXPORT

Modified: branches/gc_encapsulate/src/gc/gc_ms.c
==============================================================================
--- branches/gc_encapsulate/src/gc/gc_ms.c	Wed Jan 13 22:07:17 2010	(r43448)
+++ branches/gc_encapsulate/src/gc/gc_ms.c	Wed Jan 13 22:07:37 2010	(r43449)
@@ -52,6 +52,7 @@
 static void* gc_ms_allocate_buffer_with_pointers(PARROT_INTERP, size_t size)
         __attribute__nonnull__(1);
 
+PARROT_CAN_RETURN_NULL
 static void* gc_ms_allocate_fixed_size_buffer(PARROT_INTERP, size_t size)
         __attribute__nonnull__(1);
 
@@ -63,6 +64,12 @@
 static STRING* gc_ms_allocate_string_header(PARROT_INTERP, UINTVAL flags)
         __attribute__nonnull__(1);
 
+static void gc_ms_block_gc_mark(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+static void gc_ms_block_gc_sweep(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
 static void gc_ms_finalize(PARROT_INTERP,
     ARGIN(Memory_Pools * const mem_pools))
         __attribute__nonnull__(1)
@@ -125,6 +132,12 @@
     Parrot_gc_trace_type trace)
         __attribute__nonnull__(1);
 
+static void gc_ms_unblock_gc_mark(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+static void gc_ms_unblock_gc_sweep(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
 static void Parrot_gc_free_attributes_from_pool(PARROT_INTERP,
     ARGMOD(PMC_Attribute_Pool *pool),
     ARGMOD(void *data))
@@ -157,6 +170,10 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_allocate_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_block_gc_mark __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_block_gc_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms_finalize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools))
@@ -189,6 +206,10 @@
     , PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_gc_ms_trace_active_PMCs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_unblock_gc_mark __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_gc_ms_unblock_gc_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_gc_free_attributes_from_pool \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -236,6 +257,11 @@
     gc->allocate_buffer               = gc_ms_allocate_buffer;
     gc->allocate_buffer_with_pointers = gc_ms_allocate_buffer_with_pointers;
 
+    gc->block_gc_mark           = gc_ms_block_gc_mark;
+    gc->unblock_gc_mark         = gc_ms_unblock_gc_mark;
+    gc->block_gc_sweep          = gc_ms_block_gc_sweep;
+    gc->unblock_gc_sweep        = gc_ms_unblock_gc_sweep;
+
     mem_pools->init_pool          = gc_ms_pool_init;
     mem_pools->num_sized          = 0;
     mem_pools->num_attribs        = 0;
@@ -520,6 +546,41 @@
     return Parrot_gc_get_attributes_from_pool(interp, pool);
 }
 
+static void
+gc_ms_block_gc_mark(PARROT_INTERP)
+{
+    ASSERT_ARGS(gc_ms_block_gc_sweep)
+    Memory_Pools * const mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+    mem_pools->gc_mark_block_level++;
+}
+
+static void
+gc_ms_unblock_gc_mark(PARROT_INTERP)
+{
+    ASSERT_ARGS(gc_ms_unblock_gc_sweep)
+    Memory_Pools * const mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+    if (mem_pools->gc_mark_block_level)
+        mem_pools->gc_mark_block_level--;
+}
+
+
+static void
+gc_ms_block_gc_sweep(PARROT_INTERP)
+{
+    ASSERT_ARGS(gc_ms_block_gc_sweep)
+    Memory_Pools * const mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+    mem_pools->gc_sweep_block_level++;
+}
+
+static void
+gc_ms_unblock_gc_sweep(PARROT_INTERP)
+{
+    ASSERT_ARGS(gc_ms_unblock_gc_sweep)
+    Memory_Pools * const mem_pools = (Memory_Pools*)interp->gc_sys->gc_private;
+    if (mem_pools->gc_sweep_block_level)
+        mem_pools->gc_sweep_block_level--;
+}
+
 /*
 
 =item C<static int gc_ms_trace_active_PMCs(PARROT_INTERP, Parrot_gc_trace_type


More information about the parrot-commits mailing list