[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