[svn:parrot] r49268 - branches/gc_massacre/src/gc

bacek at svn.parrot.org bacek at svn.parrot.org
Thu Sep 23 08:14:11 UTC 2010


Author: bacek
Date: Thu Sep 23 08:14:11 2010
New Revision: 49268
URL: https://trac.parrot.org/parrot/changeset/49268

Log:
Implement gc_ms2_finalize

Modified:
   branches/gc_massacre/src/gc/gc_ms2.c

Modified: branches/gc_massacre/src/gc/gc_ms2.c
==============================================================================
--- branches/gc_massacre/src/gc/gc_ms2.c	Thu Sep 23 08:13:57 2010	(r49267)
+++ branches/gc_massacre/src/gc/gc_ms2.c	Thu Sep 23 08:14:11 2010	(r49268)
@@ -130,6 +130,9 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
+static void gc_ms2_finalize(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
 static void gc_ms2_free_buffer_header(PARROT_INTERP,
     ARGFREE(Buffer *s),
     SHIM(size_t size))
@@ -287,6 +290,8 @@
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(list))
+#define ASSERT_ARGS_gc_ms2_finalize __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms2_free_buffer_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_ms2_free_fixed_size_storage \
@@ -541,8 +546,7 @@
     ASSERT_ARGS(Parrot_gc_ms2_init)
     struct MarkSweep_GC *self;
 
-    interp->gc_sys->do_gc_mark         = gc_ms2_mark_and_sweep;
-    interp->gc_sys->finalize_gc_system = NULL;
+    interp->gc_sys->finalize_gc_system = gc_ms2_finalize;
 
     interp->gc_sys->do_gc_mark              = gc_ms2_mark_and_sweep;
     interp->gc_sys->compact_string_pool     = gc_ms2_compact_memory_pool;
@@ -625,6 +629,28 @@
     Parrot_gc_str_initialize(interp, &self->string_gc);
 }
 
+/*
+=item C<static void gc_ms2_finalize(PARROT_INTERP)>
+
+Finalize GC subsystem.
+
+=cut
+*/
+static void
+gc_ms2_finalize(PARROT_INTERP)
+{
+    ASSERT_ARGS(gc_ms2_finalize)
+    MarkSweep_GC *self = (MarkSweep_GC *)interp->gc_sys->gc_private;
+
+    Parrot_gc_str_finalize(interp, &self->string_gc);
+
+    // Parrot_list_destroy(interp, self->objects);
+    // Parrot_list_destroy(interp, self->strings);
+    Parrot_gc_pool_destroy(interp, self->pmc_allocator);
+    Parrot_gc_pool_destroy(interp, self->string_allocator);
+    Parrot_gc_fixed_allocator_destroy(interp, self->fixed_size_allocator);
+}
+
 PARROT_MALLOC
 PARROT_CAN_RETURN_NULL
 static PMC*
@@ -976,7 +1002,7 @@
         return;
 
     if (flags & GC_finish_FLAG) {
-        /* FIXME Cleanup here */
+        /* Ignore it. Will cleanup in gc_ms2_finalize */
         return;
     }
 


More information about the parrot-commits mailing list