Merge pull request #2154 from BrennanConroy/bug_30018
[mono.git] / mono / sgen / sgen-gc.c
index 73e334c882ece03302861d267295d2de6cc13a30..18960bbc1ca447786f2f24d84b13de226316ca37 100644 (file)
@@ -822,6 +822,8 @@ sgen_conservatively_pin_objects_from (void **start, void **end, void *start_nurs
 {
        int count = 0;
 
+       SGEN_ASSERT (0, ((mword)start & (SIZEOF_VOID_P - 1)) == 0, "Why are we scanning for references in unaligned memory ?");
+
 #if defined(VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE) && !defined(_WIN64)
        VALGRIND_MAKE_MEM_DEFINED_IF_ADDRESSABLE (start, (char*)end - (char*)start);
 #endif
@@ -2254,13 +2256,9 @@ sgen_perform_collection (size_t requested_size, int generation_to_collect, const
                        major_finish_concurrent_collection (wait_to_finish);
                        oldest_generation_collected = GENERATION_OLD;
                } else {
-                       sgen_workers_signal_start_nursery_collection_and_wait ();
-
                        major_update_concurrent_collection ();
                        if (generation_to_collect == GENERATION_NURSERY)
                                collect_nursery (NULL, FALSE);
-
-                       sgen_workers_signal_finish_nursery_collection ();
                }
 
                goto done;
@@ -2672,7 +2670,7 @@ mono_gc_wbarrier_generic_store (gpointer ptr, GCObject* value)
        SGEN_UPDATE_REFERENCE_ALLOW_NULL (ptr, value);
        if (ptr_in_nursery (value) || concurrent_collection_in_progress)
                mono_gc_wbarrier_generic_nostore (ptr);
-       mono_gc_dummy_use (value);
+       sgen_dummy_use (value);
 }
 
 /* Same as mono_gc_wbarrier_generic_store () but performs the store
@@ -2690,7 +2688,7 @@ mono_gc_wbarrier_generic_store_atomic (gpointer ptr, GCObject *value)
        if (ptr_in_nursery (value) || concurrent_collection_in_progress)
                mono_gc_wbarrier_generic_nostore (ptr);
 
-       mono_gc_dummy_use (value);
+       sgen_dummy_use (value);
 }
 
 void
@@ -2859,6 +2857,7 @@ sgen_gc_init (void)
        sgen_init_descriptors ();
        sgen_init_gray_queues ();
        sgen_init_allocator ();
+       sgen_init_gchandles ();
 
        sgen_register_fixed_internal_mem_type (INTERNAL_MEM_SECTION, SGEN_SIZEOF_GC_MEM_SECTION);
        sgen_register_fixed_internal_mem_type (INTERNAL_MEM_GRAY_QUEUE, sizeof (GrayQueueSection));