[svn:parrot] r49371 - branches/generational_gc/src

bacek at svn.parrot.org bacek at svn.parrot.org
Tue Sep 28 23:17:10 UTC 2010


Author: bacek
Date: Tue Sep 28 23:17:09 2010
New Revision: 49371
URL: https://trac.parrot.org/parrot/changeset/49371

Log:
Add write barriers where we are changing Sub PMC directly.

Modified:
   branches/generational_gc/src/multidispatch.c

Modified: branches/generational_gc/src/multidispatch.c
==============================================================================
--- branches/generational_gc/src/multidispatch.c	Tue Sep 28 20:56:46 2010	(r49370)
+++ branches/generational_gc/src/multidispatch.c	Tue Sep 28 23:17:09 2010	(r49371)
@@ -560,6 +560,7 @@
             if (PMC_IS_NULL(converted_sig))
                 return PMCNULL;
 
+            Parrot_gc_write_barrier(interp, sub_pmc);
             multi_sig = sub->multi_signature = converted_sig;
         }
 
@@ -598,6 +599,7 @@
 
             GETATTR_NativePCCMethod_mmd_long_signature(interp, pmc, long_sig);
             multi_sig = mmd_build_type_tuple_from_long_sig(interp, long_sig);
+            Parrot_gc_write_barrier(interp, pmc);
             SETATTR_NativePCCMethod_mmd_multi_sig(interp, pmc, multi_sig);
         }
     }
@@ -608,6 +610,7 @@
 
             GETATTR_NCI_long_signature(interp, pmc, long_sig);
             multi_sig = mmd_build_type_tuple_from_long_sig(interp, long_sig);
+            Parrot_gc_write_barrier(interp, pmc);
             SETATTR_NCI_multi_sig(interp, pmc, multi_sig);
         }
     }
@@ -979,6 +982,8 @@
     /* Attach a type tuple array to the sub for multi dispatch */
     PMC    *multi_sig = mmd_build_type_tuple_from_type_list(interp, type_list);
 
+    Parrot_gc_write_barrier(interp, sub_obj);
+
     if (sub_obj->vtable->base_type == enum_class_NativePCCMethod) {
         SETATTR_NativePCCMethod_mmd_multi_sig(interp, sub_obj, multi_sig);
     }
@@ -1027,6 +1032,8 @@
     PMC    *multi_sig     = mmd_build_type_tuple_from_long_sig(interp,
                                 long_sig_str);
 
+    Parrot_gc_write_barrier(interp, sub_obj);
+
     VTABLE_set_pointer_keyed_str(interp, sub_obj, short_sig_str,
                                     F2DPTR(multi_func_ptr));
 
@@ -1072,6 +1079,8 @@
         /* Create an NCI sub for the C function */
         PMC    *sub_obj       = Parrot_pmc_new_constant(interp, enum_class_NCI);
 
+        Parrot_gc_write_barrier(interp, sub_obj);
+
         VTABLE_set_pointer_keyed_str(interp, sub_obj, short_sig,
                                      F2DPTR(func_ptr));
 


More information about the parrot-commits mailing list