From 85eb8f885009a775b5fdc70b862094213ed48325 Mon Sep 17 00:00:00 2001 From: Tak Date: Tue, 19 Oct 2010 11:58:36 +0200 Subject: [PATCH] [Fix] Ensure that exceptions are propagated when embedding * metadata/object.c: * mini/mini.c: Ensure that exceptions get propagated back to the caller when mono is being embedded. License: MIT/X11 --- mono/metadata/object.c | 4 +++- mono/mini/mini.c | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/mono/metadata/object.c b/mono/metadata/object.c index c75c5998428d..56dcc0627c69 100644 --- a/mono/metadata/object.c +++ b/mono/metadata/object.c @@ -267,7 +267,9 @@ mono_runtime_class_init_full (MonoVTable *vtable, gboolean raise_exception) MonoVTable *module_vtable = mono_class_vtable_full (vtable->domain, module_klass, raise_exception); if (!module_vtable) return NULL; - mono_runtime_class_init (module_vtable); + exc = mono_runtime_class_init_full (module_vtable, raise_exception); + if (exc) + return exc; } } method = mono_class_get_cctor (klass); diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 491b3d7e9050..9784f4188af2 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -4434,11 +4434,16 @@ mono_jit_compile_method_with_opt (MonoMethod *method, guint32 opt, MonoException /* We can't use a domain specific method in another domain */ if (! ((domain != target_domain) && !info->domain_neutral)) { MonoVTable *vtable; + MonoException *tmpEx; mono_jit_stats.methods_lookups++; vtable = mono_class_vtable (domain, method->klass); g_assert (vtable); - mono_runtime_class_init (vtable); + tmpEx = mono_runtime_class_init_full (vtable, ex == NULL); + if (tmpEx) { + *ex = tmpEx; + return NULL; + } return mono_create_ftnptr (target_domain, info->code_start); } }