Imported Upstream version 5.0.0.48

Former-commit-id: 820b1abb8b0084602f3170cd587a99c905e1dae5
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-04-11 11:25:27 +00:00
parent 6bdd276d05
commit 5005e1465f
2770 changed files with 311123 additions and 147 deletions

View File

@@ -330,7 +330,9 @@ marker_idle_func (void *data_untyped)
if (data->private_gray_queue.num_sections > 16 && workers_finished && worker_awakenings < active_workers_num) {
/* We bound the number of worker awakenings just to be sure */
worker_awakenings++;
mono_os_mutex_lock (&finished_lock);
sgen_workers_ensure_awake ();
mono_os_mutex_unlock (&finished_lock);
}
} else {
worker_try_finish (data);
@@ -424,7 +426,13 @@ sgen_workers_start_all_workers (SgenObjectOperations *object_ops_nopar, SgenObje
worker_awakenings = 0;
mono_memory_write_barrier ();
/*
* We expect workers to start finishing only after all of them were awaken.
* Otherwise we might think that we have fewer workers and use wrong context.
*/
mono_os_mutex_lock (&finished_lock);
sgen_workers_ensure_awake ();
mono_os_mutex_unlock (&finished_lock);
}
void