X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fgc.c;h=4cda6ddb320b7b922fc56033c80a6b3594322aed;hb=66205238fc51274272ba9db9ce07e9b2fb60d1a6;hp=4b1a56f4c0feeba858aca442d9e0ab057d7b1130;hpb=75fd607a5c178dde86a8d382ddf2ffa35d4e111c;p=mono.git diff --git a/mono/metadata/gc.c b/mono/metadata/gc.c index 4b1a56f4c0f..4cda6ddb320 100644 --- a/mono/metadata/gc.c +++ b/mono/metadata/gc.c @@ -44,6 +44,8 @@ #include #include #include +#include +#include #ifndef HOST_WIN32 #include @@ -597,7 +599,7 @@ ves_icall_System_GC_WaitForPendingFinalizers (void) mono_gc_finalize_notify (); /* g_print ("Waiting for pending finalizers....\n"); */ MONO_ENTER_GC_SAFE; - WaitForSingleObjectEx (pending_done_event, INFINITE, TRUE); + mono_win32_wait_for_single_object_ex (pending_done_event, INFINITE, TRUE); MONO_EXIT_GC_SAFE; /* g_print ("Done pending....\n"); */ #else @@ -780,7 +782,7 @@ finalize_domain_objects (void) DomainFinalizationReq *req = NULL; MonoDomain *domain; - if (domains_to_finalize) { + if (UnlockedReadPointer ((gpointer)&domains_to_finalize)) { mono_finalizer_lock (); if (domains_to_finalize) { req = (DomainFinalizationReq *)domains_to_finalize->data; @@ -995,7 +997,7 @@ mono_gc_cleanup (void) ret = guarded_wait (gc_thread->handle, MONO_INFINITE_WAIT, FALSE); g_assert (ret == MONO_THREAD_INFO_WAIT_RET_SUCCESS_0); - mono_thread_join (GUINT_TO_POINTER (gc_thread->tid)); + mono_threads_add_joinable_thread ((gpointer)(MONO_UINT_TO_NATIVE_THREAD_ID (gc_thread->tid))); break; } @@ -1008,7 +1010,7 @@ mono_gc_cleanup (void) mono_gc_suspend_finalizers (); /* Try to abort the thread, in the hope that it is running managed code */ - mono_thread_internal_abort (gc_thread); + mono_thread_internal_abort (gc_thread, FALSE); /* Wait for it to stop */ ret = guarded_wait (gc_thread->handle, 100, FALSE); @@ -1020,7 +1022,7 @@ mono_gc_cleanup (void) g_assert (ret == MONO_THREAD_INFO_WAIT_RET_SUCCESS_0); - mono_thread_join (GUINT_TO_POINTER (gc_thread->tid)); + mono_threads_add_joinable_thread ((gpointer)(MONO_UINT_TO_NATIVE_THREAD_ID (gc_thread->tid))); break; }