From 594d04c309608e2b09209f741537ef7ec5efe65b Mon Sep 17 00:00:00 2001 From: kumpera Date: Tue, 11 May 2010 19:30:44 +0000 Subject: [PATCH] 2010-05-11 Rodrigo Kumpera * appdomain.c (create_exceptions): Rename to create_domain_objects. Create the ephemeron tombstone object. * domains-internals.h (MonoDomain): Add new field for the ephemeron tombstone. * domain.c (mono_domain_free): Set ephemeron_tombstone to NULL. git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mono@157152 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- mono/metadata/ChangeLog | 11 +++++++++++ mono/metadata/appdomain.c | 9 ++++++--- mono/metadata/domain-internals.h | 2 ++ mono/metadata/domain.c | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index a33e9c34a..e1c1f4de3 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -11,6 +11,17 @@ 2010-05-11 Rodrigo Kumpera + * appdomain.c (create_exceptions): Rename to + create_domain_objects. Create the ephemeron tombstone object. + + * domains-internals.h (MonoDomain): Add new field for the + ephemeron tombstone. + + * domain.c (mono_domain_free): Set ephemeron_tombstone to + NULL. + +2010-05-11 Rodrigo Kumpera + * sgen-gc.c (mono_gc_clear_domain): Both ephemerons and dislinks must be processed before LOS since they could end up with pointers to memory returned to the diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 79cfcaa63..a50bbdf33 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -165,7 +165,7 @@ mono_runtime_get_no_exec (void) } static void -create_exceptions (MonoDomain *domain) +create_domain_objects (MonoDomain *domain) { MonoDomain *old_domain = mono_domain_get (); MonoString *arg; @@ -190,6 +190,9 @@ create_exceptions (MonoDomain *domain) arg = mono_string_new (domain, "The requested operation caused a stack overflow."); domain->stack_overflow_ex = mono_exception_from_name_two_strings (mono_defaults.corlib, "System", "StackOverflowException", arg, NULL); + /*The ephemeron tombstone i*/ + domain->ephemeron_tombstone = mono_object_new (domain, mono_defaults.object_class); + if (domain != old_domain) { mono_thread_pop_appdomain_ref (); mono_domain_set_internal_with_options (old_domain, FALSE); @@ -263,7 +266,7 @@ mono_runtime_init (MonoDomain *domain, MonoThreadStartCB start_cb, mono_type_initialization_init (); if (!mono_runtime_get_no_exec ()) - create_exceptions (domain); + create_domain_objects (domain); /* GC init has to happen after thread init */ mono_gc_init (); @@ -516,7 +519,7 @@ mono_domain_create_appdomain_internal (char *friendly_name, MonoAppDomainSetup * g_free (shadow_location); #endif - create_exceptions (data); + create_domain_objects (data); return ad; } diff --git a/mono/metadata/domain-internals.h b/mono/metadata/domain-internals.h index c4579ebe1..fdcfdf420 100644 --- a/mono/metadata/domain-internals.h +++ b/mono/metadata/domain-internals.h @@ -229,6 +229,8 @@ struct _MonoDomain { MonoException *stack_overflow_ex; /* typeof (void) */ MonoObject *typeof_void; + /* Ephemeron Tombstone*/ + MonoObject *ephemeron_tombstone; /* * The fields between FIRST_GC_TRACKED and LAST_GC_TRACKED are roots, but * not object references. diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c index bf7fce569..4629b351b 100644 --- a/mono/metadata/domain.c +++ b/mono/metadata/domain.c @@ -1999,6 +1999,7 @@ mono_domain_free (MonoDomain *domain, gboolean force) domain->out_of_memory_ex = NULL; domain->null_reference_ex = NULL; domain->stack_overflow_ex = NULL; + domain->ephemeron_tombstone = NULL; domain->entry_assembly = NULL; g_free (domain->friendly_name); -- 2.11.4.GIT