[sgen] Make `wbarrier_value_copy` take the element size, not the class.
authorMark Probst <mark.probst@gmail.com>
Thu, 18 Dec 2014 23:38:46 +0000 (15:38 -0800)
committerMark Probst <mark.probst@gmail.com>
Wed, 29 Apr 2015 17:57:44 +0000 (10:57 -0700)
mono/metadata/sgen-cardtable.c
mono/metadata/sgen-gc.h
mono/metadata/sgen-mono.c

index 1d66fde49790c21d164f78d3b90d0cb53f2506c7..107ebc65d037bd93b830a1c11c1c69fff5f704cc 100644 (file)
@@ -131,9 +131,8 @@ sgen_card_table_wbarrier_arrayref_copy (gpointer dest_ptr, gpointer src_ptr, int
 }
 
 static void
-sgen_card_table_wbarrier_value_copy (gpointer dest, gpointer src, int count, MonoClass *klass)
+sgen_card_table_wbarrier_value_copy (gpointer dest, gpointer src, int count, size_t element_size)
 {
-       size_t element_size = mono_class_value_size (klass, NULL);
        size_t size = count * element_size;
 
 #ifdef DISABLE_CRITICAL_REGION
index 68966f89503d2fdedb865d689caca041b32596d0..26d9b417d5fcd71dcdda04c9e0736767ff7c8f42 100644 (file)
@@ -729,7 +729,7 @@ typedef struct _SgenRememberedSet {
        void (*wbarrier_set_field) (MonoObject *obj, gpointer field_ptr, MonoObject* value);
        void (*wbarrier_set_arrayref) (MonoArray *arr, gpointer slot_ptr, MonoObject* value);
        void (*wbarrier_arrayref_copy) (gpointer dest_ptr, gpointer src_ptr, int count);
-       void (*wbarrier_value_copy) (gpointer dest, gpointer src, int count, MonoClass *klass);
+       void (*wbarrier_value_copy) (gpointer dest, gpointer src, int count, size_t element_size);
        void (*wbarrier_object_copy) (MonoObject* obj, MonoObject *src);
        void (*wbarrier_generic_nostore) (gpointer ptr);
        void (*record_pointer) (gpointer ptr);
index 776236f1d5d536c013ce6db7cc480b8dcd9905e2..64e8db5dace178ce659ca657af8d7d9e17cd320e 100644 (file)
@@ -90,7 +90,7 @@ mono_gc_wbarrier_value_copy (gpointer dest, gpointer src, int count, MonoClass *
        }
 #endif
 
-       sgen_get_remset ()->wbarrier_value_copy (dest, src, count, klass);
+       sgen_get_remset ()->wbarrier_value_copy (dest, src, count, mono_class_value_size (klass, NULL));
 }
 
 /**