[svn:parrot] r41461 - in trunk: include/parrot src/gc

chromatic at svn.parrot.org chromatic at svn.parrot.org
Fri Sep 25 01:29:12 UTC 2009


Author: chromatic
Date: Fri Sep 25 01:29:09 2009
New Revision: 41461
URL: https://trac.parrot.org/parrot/changeset/41461

Log:
[GC] Fixed PMC marking in debugging builds by unilaterally moving the
recursion-stopping "Is this PMC already live?" check back into
Parrot_gc_mark_PMC_alive_fun().

Modified:
   trunk/include/parrot/gc_api.h
   trunk/src/gc/api.c

Modified: trunk/include/parrot/gc_api.h
==============================================================================
--- trunk/include/parrot/gc_api.h	Fri Sep 25 00:58:19 2009	(r41460)
+++ trunk/include/parrot/gc_api.h	Fri Sep 25 01:29:09 2009	(r41461)
@@ -466,7 +466,7 @@
 
 #ifdef NDEBUG
 #  define Parrot_gc_mark_PMC_alive(interp, obj) \
-        do if (! PMC_IS_NULL(obj) && !PObj_is_live_or_free_TESTALL(obj)) \
+        do if (! PMC_IS_NULL(obj)) \
             Parrot_gc_mark_PMC_alive_fun((interp), (obj)); while (0)
 #  ifdef PARROT_IN_CORE
 #    define Parrot_gc_mark_STRING_alive(interp, obj) \

Modified: trunk/src/gc/api.c
==============================================================================
--- trunk/src/gc/api.c	Fri Sep 25 00:58:19 2009	(r41460)
+++ trunk/src/gc/api.c	Fri Sep 25 01:29:09 2009	(r41461)
@@ -252,6 +252,9 @@
     if (!PMC_IS_NULL(obj)) {
         PARROT_ASSERT(PObj_is_PMC_TEST(obj));
 
+        if (PObj_is_live_or_free_TESTALL(obj))
+            return;
+
         /* mark it live */
         PObj_live_SET(obj);
 


More information about the parrot-commits mailing list