Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / metadata / null-gc.c
index 597224a7672a44a2674fab5369b412e75b5e8759..d791744dd05833825c1315545e09a9b756e7cc07 100644 (file)
 #include <mono/metadata/mono-gc.h>
 #include <mono/metadata/gc-internals.h>
 #include <mono/metadata/runtime.h>
+#include <mono/metadata/w32handle.h>
 #include <mono/utils/atomic.h>
 #include <mono/utils/mono-threads.h>
 #include <mono/utils/mono-counters.h>
+#include <mono/metadata/null-gc-handles.h>
 
 #ifdef HAVE_NULL_GC
 
+static gboolean gc_inited = FALSE;
+
 void
 mono_gc_base_init (void)
 {
-       MonoThreadInfoCallbacks cb;
-       int dummy;
+       if (gc_inited)
+               return;
 
        mono_counters_init ();
 
@@ -31,15 +35,14 @@ mono_gc_base_init (void)
        mono_w32handle_init ();
 #endif
 
-       memset (&cb, 0, sizeof (cb));
-       /* TODO: This casts away an incompatible pointer type warning in the same
-                manner that boehm-gc does it. This is probably worth investigating
-                more carefully. */
-       cb.mono_method_is_critical = (gpointer)mono_runtime_is_critical_method;
+       mono_thread_callbacks_init ();
+       mono_thread_info_init (sizeof (MonoThreadInfo));
+
+       mono_thread_info_attach ();
 
-       mono_threads_init (&cb, sizeof (MonoThreadInfo));
+       null_gc_handles_init ();
 
-       mono_thread_info_attach (&dummy);
+       gc_inited = TRUE;
 }
 
 void
@@ -94,12 +97,6 @@ mono_gc_is_gc_thread (void)
        return TRUE;
 }
 
-gboolean
-mono_gc_register_thread (void *baseptr)
-{
-       return TRUE;
-}
-
 int
 mono_gc_walk_heap (int flags, MonoGCReferences callback, void *data)
 {
@@ -123,24 +120,6 @@ mono_gc_deregister_root (char* addr)
 {
 }
 
-void
-mono_gc_weak_link_add (void **link_addr, MonoObject *obj, gboolean track)
-{
-       *link_addr = obj;
-}
-
-void
-mono_gc_weak_link_remove (void **link_addr, gboolean track)
-{
-       *link_addr = NULL;
-}
-
-MonoObject*
-mono_gc_weak_link_get (void **link_addr)
-{
-       return *link_addr;
-}
-
 void*
 mono_gc_make_descr_for_string (gsize *bitmap, int numbits)
 {
@@ -303,6 +282,25 @@ mono_gc_is_critical_method (MonoMethod *method)
        return FALSE;
 }
 
+gpointer
+mono_gc_thread_attach (MonoThreadInfo* info)
+{
+       info->handle_stack = mono_handle_stack_alloc ();
+       return info;
+}
+
+void
+mono_gc_thread_detach_with_lock (MonoThreadInfo *p)
+{
+       mono_handle_stack_free (p->handle_stack);
+}
+
+gboolean
+mono_gc_thread_in_critical_region (MonoThreadInfo *info)
+{
+       return FALSE;
+}
+
 int
 mono_gc_get_aligned_size_for_allocator (int size)
 {
@@ -339,27 +337,6 @@ mono_gc_get_gc_name (void)
        return "null";
 }
 
-void
-mono_gc_add_weak_track_handle (MonoObject *obj, guint32 gchandle)
-{
-}
-
-void
-mono_gc_change_weak_track_handle (MonoObject *old_obj, MonoObject *obj, guint32 gchandle)
-{
-}
-
-void
-mono_gc_remove_weak_track_handle (guint32 gchandle)
-{
-}
-
-GSList*
-mono_gc_remove_weak_track_object (MonoDomain *domain, MonoObject *obj)
-{
-       return NULL;
-}
-
 void
 mono_gc_clear_domain (MonoDomain *domain)
 {
@@ -563,6 +540,19 @@ mono_gc_is_null (void)
 {
        return TRUE;
 }
+
+int
+mono_gc_invoke_finalizers (void)
+{
+       return 0;
+}
+
+MonoBoolean
+mono_gc_pending_finalizers (void)
+{
+       return FALSE;
+}
+
 #else
 
 MONO_EMPTY_SOURCE_FILE (null_gc);