Merge pull request #2420 from stefansedich/master
[mono.git] / mono / metadata / gc.c
index a82c420111495eaecc0c7f5775fb246f31ecfea2..7f85c3a0e04b33dee00a398c595a7e1510d138fe 100644 (file)
@@ -151,7 +151,7 @@ mono_gc_run_finalize (void *obj, void *data)
 #ifndef HAVE_SGEN_GC
        mono_domain_finalizers_lock (domain);
 
-       o2 = g_hash_table_lookup (domain->finalizable_objects_hash, o);
+       o2 = (MonoObject *)g_hash_table_lookup (domain->finalizable_objects_hash, o);
 
        mono_domain_finalizers_unlock (domain);
 
@@ -161,7 +161,7 @@ mono_gc_run_finalize (void *obj, void *data)
 #endif
 
        /* make sure the finalizer is not called again if the object is resurrected */
-       object_register_finalizer (obj, NULL);
+       object_register_finalizer ((MonoObject *)obj, NULL);
 
        if (log_finalizers)
                g_log ("mono-gc-finalizers", G_LOG_LEVEL_MESSAGE, "<%s at %p> Registered finalizer as processed.", o->vtable->klass->name, o);
@@ -236,12 +236,12 @@ mono_gc_run_finalize (void *obj, void *data)
                g_log ("mono-gc-finalizers", G_LOG_LEVEL_MESSAGE, "<%s at %p> Compiling finalizer.", o->vtable->klass->name, o);
 
        if (!domain->finalize_runtime_invoke) {
-               MonoMethod *invoke = mono_marshal_get_runtime_invoke (mono_class_get_method_from_name_flags (mono_defaults.object_class, "Finalize", 0, 0), TRUE, FALSE);
+               MonoMethod *invoke = mono_marshal_get_runtime_invoke (mono_class_get_method_from_name_flags (mono_defaults.object_class, "Finalize", 0, 0), TRUE);
 
                domain->finalize_runtime_invoke = mono_compile_method (invoke);
        }
 
-       runtime_invoke = domain->finalize_runtime_invoke;
+       runtime_invoke = (RuntimeInvokeFunction)domain->finalize_runtime_invoke;
 
        mono_runtime_class_init (o->vtable);
 
@@ -601,12 +601,6 @@ ves_icall_System_GCHandle_GetAddrOfPinnedObject (guint32 handle)
        return NULL;
 }
 
-MonoBoolean
-ves_icall_Mono_Runtime_SetGCAllowSynchronousMajor (MonoBoolean flag)
-{
-       return mono_gc_set_allow_synchronous_major (flag);
-}
-
 MonoBoolean
 mono_gc_GCHandle_CheckCurrentDomain (guint32 gchandle)
 {
@@ -729,7 +723,7 @@ finalizer_thread (gpointer unused)
                if (domains_to_finalize) {
                        mono_finalizer_lock ();
                        if (domains_to_finalize) {
-                               DomainFinalizationReq *req = domains_to_finalize->data;
+                               DomainFinalizationReq *req = (DomainFinalizationReq *)domains_to_finalize->data;
                                domains_to_finalize = g_slist_remove (domains_to_finalize, req);
                                mono_finalizer_unlock ();
 
@@ -870,6 +864,7 @@ mono_gc_cleanup (void)
 
                                mono_thread_join (GUINT_TO_POINTER (gc_thread->tid));
                        }
+                       g_assert (finalizer_thread_exited);
                }
                gc_thread = NULL;
                mono_gc_base_cleanup ();
@@ -919,15 +914,6 @@ mono_gc_get_mach_exception_thread (void)
 }
 #endif
 
-#ifndef HAVE_SGEN_GC
-void*
-mono_gc_alloc_mature (MonoVTable *vtable)
-{
-       return mono_object_new_specific (vtable);
-}
-#endif
-
-
 static MonoReferenceQueue *ref_queues;
 
 static void
@@ -937,7 +923,7 @@ ref_list_remove_element (RefQueueEntry **prev, RefQueueEntry *element)
                /* Guard if head is changed concurrently. */
                while (*prev != element)
                        prev = &(*prev)->next;
-       } while (prev && InterlockedCompareExchangePointer ((void*)prev, element->next, element) != element);
+       } while (prev && InterlockedCompareExchangePointer ((volatile gpointer *)prev, element->next, element) != element);
 }
 
 static void
@@ -948,7 +934,7 @@ ref_list_push (RefQueueEntry **head, RefQueueEntry *value)
                current = *head;
                value->next = current;
                STORE_STORE_FENCE; /*Must make sure the previous store is visible before the CAS. */
-       } while (InterlockedCompareExchangePointer ((void*)head, value, current) != current);
+       } while (InterlockedCompareExchangePointer ((volatile gpointer *)head, value, current) != current);
 }
 
 static void