From f61961c036d518d8d524c3e43508d0f36a170a89 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Mon, 9 Aug 2010 21:55:25 +0200 Subject: [PATCH] Avoid registering roots inside the MonoDomain structure when using Boehm, since it is GC_MALLOC-ed, and Boehm doesn't like that. --- mono/metadata/domain.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c index b805ce4bee6..26879895580 100644 --- a/mono/metadata/domain.c +++ b/mono/metadata/domain.c @@ -1181,15 +1181,24 @@ mono_domain_create (void) } mono_appdomains_unlock (); +#ifdef HAVE_BOEHM_GC + /* + * Boehm doesn't like roots inside GC allocated objects, and alloc_fixed returns + * a GC_MALLOC-ed object, contrary to the api docs. This causes random crashes when + * running the corlib test suite. + * To solve this, we pass a NULL descriptor, and don't register roots. + */ + domain = mono_gc_alloc_fixed (sizeof (MonoDomain), NULL); +#else domain = mono_gc_alloc_fixed (sizeof (MonoDomain), domain_gc_desc); + 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), NULL); +#endif domain->shadow_serial = shadow_serial; domain->domain = NULL; domain->setup = NULL; domain->friendly_name = NULL; domain->search_path = NULL; - 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), NULL); - mono_profiler_appdomain_event (domain, MONO_PROFILE_START_LOAD); domain->mp = mono_mempool_new (); -- 2.11.4.GIT