[sgen] Don't get the BlockInfo before checking that the object is small
authorVlad Brezae <brezaevlad@gmail.com>
Fri, 8 Jan 2016 17:01:35 +0000 (19:01 +0200)
committerVlad Brezae <brezaevlad@gmail.com>
Mon, 18 Jan 2016 17:50:41 +0000 (09:50 -0800)
The object could be large and therefore not in a block.

mono/sgen/sgen-marksweep-drain-gray-stack.h

index 2ddb9b050e33c59ff982ad878049bab7f720dda8..fc2161e7d3ec9583b1a72c5ae37515da335e4bcf 100644 (file)
@@ -225,10 +225,9 @@ SCAN_OBJECT_FUNCTION_NAME (GCObject *full_object, SgenDescriptor desc, SgenGrayQ
                GCObject *__old = *(ptr);                               \
                binary_protocol_scan_process_reference ((full_object), (ptr), __old); \
                if (__old && !sgen_ptr_in_nursery (__old)) {            \
-                       MSBlockInfo *block = MS_BLOCK_FOR_OBJ (__old);  \
                        if (G_UNLIKELY (!sgen_ptr_in_nursery (ptr) &&   \
                                        sgen_safe_object_is_small (__old, sgen_obj_get_descriptor (__old) & DESC_TYPE_MASK) && \
-                                       major_block_is_evacuating (block))) { \
+                                       major_block_is_evacuating (MS_BLOCK_FOR_OBJ (__old)))) { \
                                mark_mod_union_card ((full_object), (void**)(ptr), __old); \
                        } else {                                        \
                                PREFETCH_READ (__old);                  \