[interp] root domain must be used for AOT'd wrappers used by interpreter
authorBernhard Urban <bernhard.urban@xamarin.com>
Wed, 7 Jun 2017 16:24:17 +0000 (18:24 +0200)
committerBernhard Urban <bernhard.urban@xamarin.com>
Wed, 7 Jun 2017 21:27:44 +0000 (23:27 +0200)
mono/mini/mini-runtime.c

index 16a77660cbb758963c8ed9824fc87d5870a54f67..f67497d6836e7989f6d9378287d704d08f1de5da 100644 (file)
@@ -2063,7 +2063,18 @@ lookup_start:
 
 #ifdef MONO_USE_AOT_COMPILER
        if (opt & MONO_OPT_AOT) {
-               MonoDomain *domain = mono_domain_get ();
+               MonoDomain *domain = NULL;
+
+               if (mono_aot_mode == MONO_AOT_MODE_INTERP && method->wrapper_type == MONO_WRAPPER_UNKNOWN) {
+                       WrapperInfo *info = mono_marshal_get_wrapper_info (method);
+                       g_assert (info);
+                       if (info->subtype == WRAPPER_SUBTYPE_INTERP_IN)
+                               /* AOT'd wrappers for interp must be owned by root domain */
+                               domain = mono_get_root_domain ();
+               }
+
+               if (!domain)
+                       domain = mono_domain_get ();
 
                mono_class_init (method->klass);