[sgen] Major allocation should not happen while we sweep
authorVlad Brezae <brezaevlad@gmail.com>
Wed, 26 Aug 2015 20:47:14 +0000 (13:47 -0700)
committerVlad Brezae <brezaevlad@gmail.com>
Sat, 29 Aug 2015 01:00:17 +0000 (18:00 -0700)
mono/sgen/sgen-marksweep.c

index fe3ab1a1742b5bc311b41e7cb65aca8a7d3ad471..96444b1dc60d066f17aaf60924ba950538269c7a 100644 (file)
@@ -739,7 +739,11 @@ free_pinned_object (GCObject *obj, size_t size)
 static GCObject*
 major_alloc_degraded (GCVTable vtable, size_t size)
 {
-       GCObject *obj = alloc_obj (vtable, size, FALSE, SGEN_VTABLE_HAS_REFERENCES (vtable));
+       GCObject *obj;
+
+       major_finish_sweep_checking ();
+
+       obj = alloc_obj (vtable, size, FALSE, SGEN_VTABLE_HAS_REFERENCES (vtable));
        if (G_LIKELY (obj)) {
                HEAVY_STAT (++stat_objects_alloced_degraded);
                HEAVY_STAT (stat_bytes_alloced_degraded += size);