From ffad0e34bf07a788294626b0f2ba7acea4b93410 Mon Sep 17 00:00:00 2001 From: zoltan Date: Mon, 8 Feb 2010 16:35:46 +0000 Subject: [PATCH] 2010-02-08 Zoltan Varga * domain.c (mono_jit_info_table_find): Avoid looking in the root domain, since the caller has no way of knowing the domain which owns the returned MonoJitInfo. * appdomain.c (create_exceptions): Call mono_thread_push/popappdomain_ref (). git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mono@151031 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- mono/metadata/ChangeLog | 5 +++++ mono/metadata/appdomain.c | 8 ++++++-- mono/metadata/domain.c | 16 ++++++---------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index 5c27ea5d3..dae01a6bc 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -1,5 +1,10 @@ 2010-02-08 Zoltan Varga + * domain.c (mono_jit_info_table_find): Avoid looking in the root domain, since + the caller has no way of knowing the domain which owns the returned MonoJitInfo. + + * appdomain.c (create_exceptions): Call mono_thread_push/popappdomain_ref (). + * verify.c (mono_type_get_stack_name): Fix a warning. 2010-02-07 Zoltan Varga diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index cabe5aa8e..987de9625 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -169,8 +169,10 @@ create_exceptions (MonoDomain *domain) MonoDomain *old_domain = mono_domain_get (); MonoString *arg; - if (domain != old_domain) + if (domain != old_domain) { + mono_thread_push_appdomain_ref (domain); mono_domain_set_internal_with_options (domain, FALSE); + } /* * Create an instance early since we can't do it when there is no memory. @@ -187,8 +189,10 @@ 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); - if (domain != old_domain) + if (domain != old_domain) { + mono_thread_pop_appdomain_ref (); mono_domain_set_internal_with_options (old_domain, FALSE); + } /* * This class is used during exception handling, so initialize it here, to prevent diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c index 82f412e54..7cb7643a8 100644 --- a/mono/metadata/domain.c +++ b/mono/metadata/domain.c @@ -379,6 +379,7 @@ mono_jit_info_table_find (MonoDomain *domain, char *addr) MonoJitInfo *ji; int chunk_pos, pos; MonoThreadHazardPointers *hp = mono_hazard_pointer_get (); + MonoImage *image; ++mono_stats.jit_info_table_lookup_count; @@ -436,17 +437,12 @@ mono_jit_info_table_find (MonoDomain *domain, char *addr) mono_hazard_pointer_clear (hp, JIT_INFO_TABLE_HAZARD_INDEX); mono_hazard_pointer_clear (hp, JIT_INFO_HAZARD_INDEX); - /* maybe it is shared code, so we also search in the root domain */ ji = NULL; - if (domain != mono_root_domain) - ji = mono_jit_info_table_find (mono_root_domain, addr); - - if (ji == NULL) { - /* Maybe its an AOT module */ - MonoImage *image = mono_jit_info_find_aot_module ((guint8*)addr); - if (image) - ji = jit_info_find_in_aot_func (domain, image, addr); - } + + /* Maybe its an AOT module */ + image = mono_jit_info_find_aot_module ((guint8*)addr); + if (image) + ji = jit_info_find_in_aot_func (domain, image, addr); return ji; } -- 2.11.4.GIT