projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #956 from ermshiperete/bug-xamarin-14987
[mono.git]
/
mono
/
metadata
/
sgen-stw.c
diff --git
a/mono/metadata/sgen-stw.c
b/mono/metadata/sgen-stw.c
index 0f52505544c9184fe56b7574180933df1e8b95e1..b6fe446cc36d28b5e8d4ca3341b342b5158007a2 100755
(executable)
--- a/
mono/metadata/sgen-stw.c
+++ b/
mono/metadata/sgen-stw.c
@@
-147,11
+147,7
@@
restart_threads_until_none_in_managed_allocator (void)
sgen_wait_for_suspend_ack (restart_count);
if (sleep_duration < 0) {
sgen_wait_for_suspend_ack (restart_count);
if (sleep_duration < 0) {
-#ifdef HOST_WIN32
- SwitchToThread ();
-#else
- sched_yield ();
-#endif
+ mono_thread_info_yield ();
sleep_duration = 0;
} else {
g_usleep (sleep_duration);
sleep_duration = 0;
} else {
g_usleep (sleep_duration);
@@
-204,13
+200,13
@@
sgen_stop_world (int generation)
{
int count, dead;
{
int count, dead;
- /*XXX this is the right stop, thought might not be the nicest place to put it*/
- sgen_process_togglerefs ();
-
mono_profiler_gc_event (MONO_GC_EVENT_PRE_STOP_WORLD, generation);
MONO_GC_WORLD_STOP_BEGIN ();
acquire_gc_locks ();
mono_profiler_gc_event (MONO_GC_EVENT_PRE_STOP_WORLD, generation);
MONO_GC_WORLD_STOP_BEGIN ();
acquire_gc_locks ();
+ /* We start to scan after locks are taking, this ensures we won't be interrupted. */
+ sgen_process_togglerefs ();
+
update_current_thread_stack (&count);
sgen_global_stop_count++;
update_current_thread_stack (&count);
sgen_global_stop_count++;
@@
-277,7
+273,7
@@
sgen_restart_world (int generation, GGTimingInfo *timing)
*/
release_gc_locks ();
*/
release_gc_locks ();
-
mono_thread_hazardous_try_free_some ()
;
+
sgen_try_free_some_memory = TRUE
;
sgen_bridge_processing_finish (generation);
sgen_bridge_processing_finish (generation);