[sgen] Don't re-check reference after marking in concurrent mark.
authorMark Probst <mark.probst@gmail.com>
Fri, 20 Feb 2015 00:02:55 +0000 (16:02 -0800)
committerMark Probst <mark.probst@gmail.com>
Mon, 23 Mar 2015 22:34:02 +0000 (15:34 -0700)
If the reference was modified, it was done by the mutator, in which case it will
have marked the card if necessary.

mono/metadata/sgen-marksweep-scan-object-concurrent.h

index 7902104fb790eeb699cbbbe8ad18c8b32aa12bdf..d21c363fbae550d3ab9ab4eb459a8d7b1638b5c8 100644 (file)
@@ -38,13 +38,8 @@ extern guint64 stat_scan_object_called_major;
                SGEN_OBJECT_LAYOUT_STATISTICS_MARK_BITMAP ((obj), (ptr)); \
                binary_protocol_scan_process_reference ((obj), (ptr), __old); \
                if (__old && !sgen_ptr_in_nursery (__old)) {            \
-                       void *__copy;                                   \
                        PREFETCH_READ (__old);                  \
                        major_copy_or_mark_object_with_evacuation_concurrent ((ptr), __old, queue); \
-                       __copy = *(ptr);                                \
-                       SGEN_COND_LOG (9, __old != __copy, "Overwrote field at %p with %p (was: %p)", (ptr), *(ptr), __old); \
-                       if (G_UNLIKELY (sgen_ptr_in_nursery (__copy) && !sgen_ptr_in_nursery ((ptr)) && !SGEN_OBJECT_IS_CEMENTED (__copy))) \
-                               sgen_add_to_global_remset ((ptr), __copy);      \
                } else {                                                \
                        if (G_UNLIKELY (sgen_ptr_in_nursery (__old) && !sgen_ptr_in_nursery ((ptr)))) \
                                sgen_add_to_global_remset ((ptr), __old); \