[runtime] Remove compile-time gc dependencies from domain.c/appdomain.c. (#5263)
authorZoltan Varga <vargaz@gmail.com>
Wed, 26 Jul 2017 00:31:42 +0000 (20:31 -0400)
committerGitHub <noreply@github.com>
Wed, 26 Jul 2017 00:31:42 +0000 (20:31 -0400)
* [runtime] Remove compile-time gc dependencies from domain.c/appdomain.c.

* [runtime] Move domain.c/appdomain.c to 'common_sources' since they no longer have compile time gc dependencies.

mono/metadata/Makefile.am
mono/metadata/appdomain.c
mono/metadata/domain.c

index 166ccd00188b0a642947f550723fd4f0dd2c61d6..7b3799b9d8db9dc7a6cc7dc018d15aa37ca1b480 100644 (file)
@@ -127,6 +127,8 @@ null_gc_sources = \
 
 common_sources = \
        $(platform_sources)     \
+       appdomain.c     \
+       domain.c        \
        appdomain-icalls.h      \
        assembly.c              \
        assembly-internals.h    \
@@ -278,8 +280,6 @@ common_sources = \
 
 # These source files have compile time dependencies on GC code
 gc_dependent_sources = \
-       appdomain.c     \
-       domain.c        \
        gc-stats.c      \
        gc.c            \
        monitor.c       \
index 19c44470ec7c0a033450ff1dd769b223571cdb84..2e02c9f8cff57d9cae8b746c28ccbe163c1ef2e4 100644 (file)
@@ -2587,7 +2587,6 @@ unload_thread_main (void *arg)
 
        mono_loader_lock (); //FIXME why do we need the loader lock here?
        mono_domain_lock (domain);
-#ifdef HAVE_SGEN_GC
        /*
         * We need to make sure that we don't have any remsets
         * pointing into static data of the to-be-freed domain because
@@ -2600,7 +2599,6 @@ unload_thread_main (void *arg)
        for (i = 0; i < domain->class_vtable_array->len; ++i)
                zero_static_data ((MonoVTable *)g_ptr_array_index (domain->class_vtable_array, i));
        mono_gc_collect (0);
-#endif
        for (i = 0; i < domain->class_vtable_array->len; ++i)
                clear_cached_vtable ((MonoVTable *)g_ptr_array_index (domain->class_vtable_array, i));
        deregister_reflection_info_roots (domain);
index 2a97148f212c44612de0764e4a1ed38ea4ea2355..de2a6970f73c52d51acec59ab9e4a6416549dab8 100644 (file)
@@ -386,12 +386,12 @@ mono_domain_create (void)
        }
        mono_appdomains_unlock ();
 
-#ifdef HAVE_BOEHM_GC
-       domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "domain object");
-#else
-       domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), domain_gc_desc, MONO_ROOT_SOURCE_DOMAIN, "domain object");
-       mono_gc_register_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED), G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_LAST_GC_TRACKED) - G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_FIRST_GC_TRACKED), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "misc domain fields");
-#endif
+       if (!mono_gc_is_moving ()) {
+               domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "domain object");
+       } else {
+               domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), domain_gc_desc, MONO_ROOT_SOURCE_DOMAIN, "domain object");
+               mono_gc_register_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED), G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_LAST_GC_TRACKED) - G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_FIRST_GC_TRACKED), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "misc domain fields");
+       }
        domain->shadow_serial = shadow_serial;
        domain->domain = NULL;
        domain->setup = NULL;
@@ -1208,16 +1208,13 @@ mono_domain_free (MonoDomain *domain, gboolean force)
 
        domain->setup = NULL;
 
-#ifndef HAVE_BOEHM_GC
-       mono_gc_deregister_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED));
-#endif
+       if (mono_gc_is_moving ())
+               mono_gc_deregister_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED));
 
        mono_appdomains_lock ();
        appdomains_list [domain->domain_id] = NULL;
        mono_appdomains_unlock ();
 
-       /* FIXME: anything else required ? */
-
        mono_gc_free_fixed (domain);
 
 #ifndef DISABLE_PERFCOUNTERS