[sgen] Only enqueue objects with references.
authorMark Probst <mark.probst@gmail.com>
Wed, 10 Sep 2014 09:45:39 +0000 (11:45 +0200)
committerMark Probst <mark.probst@gmail.com>
Wed, 26 Nov 2014 18:38:39 +0000 (10:38 -0800)
mono/metadata/sgen-marksweep.c

index 2d1c6dcf51a8de7e2adf88f18308eccf235266e1..3863a44d5620cc3d46c486040ae9ae1dc0cbaed1 100644 (file)
@@ -1251,7 +1251,8 @@ optimized_copy_or_mark_object (void **ptr, void *obj, SgenGrayQueue *queue)
                        MS_CALC_MARK_BIT (__word, __bit, (obj));
                        if (!MS_MARK_BIT ((block), __word, __bit)) {
                                MS_SET_MARK_BIT ((block), __word, __bit);
-                               GRAY_OBJECT_ENQUEUE ((queue), (obj), (desc));
+                               if (sgen_gc_descr_has_references (desc))
+                                       GRAY_OBJECT_ENQUEUE (queue, obj, desc);
                        }
                } else if (SGEN_ALIGN_UP (sgen_safe_object_get_size ((MonoObject*)obj)) <= SGEN_MAX_SMALL_OBJ_SIZE ) {
                        HEAVY_STAT (++stat_optimized_copy_major_small_slow);