[svn:parrot] r42007 - trunk/src/gc

chromatic at svn.parrot.org chromatic at svn.parrot.org
Thu Oct 22 01:17:54 UTC 2009


Author: chromatic
Date: Thu Oct 22 01:17:54 2009
New Revision: 42007
URL: https://trac.parrot.org/parrot/changeset/42007

Log:
[GC] Moved mark_special() into Parrot_gc_mark_PMC_alive_fun().

Modified:
   trunk/src/gc/api.c

Modified: trunk/src/gc/api.c
==============================================================================
--- trunk/src/gc/api.c	Thu Oct 22 01:17:49 2009	(r42006)
+++ trunk/src/gc/api.c	Thu Oct 22 01:17:54 2009	(r42007)
@@ -255,9 +255,19 @@
 
         /* if object is a PMC and contains buffers or PMCs, then attach the PMC
          * to the chained mark list. */
-        if (PObj_is_special_PMC_TEST(obj))
-            mark_special(interp, obj);
-        else if (PMC_metadata(obj))
+        if (PObj_is_special_PMC_TEST(obj)) {
+            if (PObj_is_PMC_shared_TEST(obj)) {
+                Parrot_Interp i = PMC_sync(obj)->owner;
+
+                if (!i->mem_pools->gc_mark_ptr)
+                    i->mem_pools->gc_mark_ptr = obj;
+            }
+
+            if (PObj_custom_mark_TEST(obj))
+                VTABLE_mark(interp, obj);
+        }
+
+        if (PMC_metadata(obj))
             Parrot_gc_mark_PMC_alive(interp, PMC_metadata(obj));
     }
 }


More information about the parrot-commits mailing list