Imported Upstream version 4.2.2.30

Former-commit-id: 387a1af44e58248b9ada0beb315d12c52633d9e1
This commit is contained in:
Xamarin Public Jenkins
2016-01-21 17:38:10 -05:00
parent 3c6daee652
commit f302175246
22 changed files with 21 additions and 26 deletions

View File

@@ -559,17 +559,14 @@ ms_alloc_block (int size_index, gboolean pinned, gboolean has_references)
add_free_block (free_blocks, size_index, info);
/*
* This is the only place where the `allocated_blocks` array can potentially grow.
* We need to make sure concurrent sweep isn't running when that happens, so in that
* specific case we just wait for sweep to finish.
* Adding to the allocated_blocks array is racy with the removal of nulls when
* sweeping. We wait for sweep to finish to avoid that.
*
* The memory barrier here and in `sweep_job_func()` are required because we need
* `allocated_blocks` synchronized between this and the sweep thread.
*/
if (sgen_pointer_queue_will_grow (&allocated_blocks)) {
major_finish_sweep_checking ();
mono_memory_barrier ();
}
major_finish_sweep_checking ();
mono_memory_barrier ();
sgen_pointer_queue_add (&allocated_blocks, BLOCK_TAG (info));
@@ -746,8 +743,6 @@ major_alloc_degraded (GCVTable vtable, size_t size)
{
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);