From 38b9617c77aeb79b56d0817c66e421ba3fa887cd Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Tue, 25 Jul 2017 20:31:42 -0400 Subject: [PATCH] [runtime] Remove compile-time gc dependencies from domain.c/appdomain.c. (#5263) * [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 | 4 ++-- mono/metadata/appdomain.c | 2 -- mono/metadata/domain.c | 19 ++++++++----------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/mono/metadata/Makefile.am b/mono/metadata/Makefile.am index 166ccd00188..7b3799b9d8d 100644 --- a/mono/metadata/Makefile.am +++ b/mono/metadata/Makefile.am @@ -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 \ diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 19c44470ec7..2e02c9f8cff 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -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); diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c index 2a97148f212..de2a6970f73 100644 --- a/mono/metadata/domain.c +++ b/mono/metadata/domain.c @@ -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 -- 2.25.1