[runtime] Use new mono_error_set_for_class_failure where applicable.
authorAlexander Kyte <alexmkyte@fastmail.com>
Tue, 31 May 2016 21:13:21 +0000 (17:13 -0400)
committerAlexander Kyte <alexmkyte@fastmail.com>
Fri, 3 Jun 2016 15:24:33 +0000 (11:24 -0400)
We were seeing an issue where attempts to create the MonoClass for an
exception in a no-exec context was causing failure. No-exec will forbid
the constructor call. Our solution was to realize that there was no
need to allocate an exception, as MonoError could already encode the
errors.

mono/metadata/icall.c
mono/metadata/object.c
mono/metadata/reflection.c
mono/mini/mini-generic-sharing.c

index 5f9cabfc9e8d4a39ef68a917a57c7a06a64c5b23..4376addf3e091105345b82a2cc53daca0e94154f 100644 (file)
@@ -133,7 +133,7 @@ mono_class_init_checked (MonoClass *klass, MonoError *error)
        mono_error_init (error);
 
        if (!mono_class_init (klass))
-               mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+               mono_error_set_for_class_failure (error, klass);
 }
 
 ICALL_EXPORT MonoObject *
@@ -4320,9 +4320,8 @@ handle_parent:
 
 
 loader_error:
-       if (mono_class_has_failure (klass)) {
-               mono_error_set_exception_instance (&error, mono_class_get_exception_for_failure (klass));
-       }
+       if (mono_class_has_failure (klass))
+               mono_error_set_for_class_failure (&error, klass);
 
 failure:
        if (properties)
@@ -4469,9 +4468,8 @@ handle_parent:
        return res;
 
 loader_error:
-       if (mono_class_has_failure (klass)) {
-               mono_error_set_exception_instance (&error, mono_class_get_exception_for_failure (klass));
-       }
+       if (mono_class_has_failure (klass))
+               mono_error_set_for_class_failure (&error, klass);
 
 failure:
        
index 5da5f6bbf33833dae7f001d288074a710f02b6ae..18f9bbf017ca2c196c4963bd87ee1db3cbdd32e6 100644 (file)
@@ -1905,7 +1905,7 @@ mono_class_vtable_full (MonoDomain *domain, MonoClass *klass, MonoError *error)
        g_assert (klass);
 
        if (mono_class_has_failure (klass)) {
-               mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+               mono_error_set_for_class_failure (error, klass);
                return NULL;
        }
 
@@ -1992,7 +1992,7 @@ mono_class_create_runtime_vtable (MonoDomain *domain, MonoClass *klass, MonoErro
                if (!mono_class_init (klass) || mono_class_has_failure (klass)) {
                        mono_domain_unlock (domain);
                        mono_loader_unlock ();
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+                       mono_error_set_for_class_failure (error, klass);
                        return NULL;
                }
        }
@@ -2013,7 +2013,7 @@ mono_class_create_runtime_vtable (MonoDomain *domain, MonoClass *klass, MonoErro
                                mono_class_set_failure (klass, MONO_EXCEPTION_TYPE_LOAD, NULL);
                        mono_domain_unlock (domain);
                        mono_loader_unlock ();
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+                       mono_error_set_for_class_failure (error, klass);
                        return NULL;
                }
        }
@@ -2034,7 +2034,7 @@ mono_class_create_runtime_vtable (MonoDomain *domain, MonoClass *klass, MonoErro
        if (mono_class_has_failure (klass)) {
                mono_domain_unlock (domain);
                mono_loader_unlock ();
-               mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+               mono_error_set_for_class_failure (error, klass);
                return NULL;
        }
 
index a9b46372aa63bdcd79e471571bbd63361b08624a..2dd53c18b14fa153f37d63e368fb6cfebefe366e 100644 (file)
@@ -8989,7 +8989,7 @@ mono_reflection_get_token_checked (MonoObject *obj, MonoError *error)
                return_val_if_nok (error, 0);
                MonoClass *mc = mono_class_from_mono_type (type);
                if (!mono_class_init (mc)) {
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (mc));
+                       mono_error_set_for_class_failure (error, mc);
                        return 0;
                }
 
@@ -9818,7 +9818,7 @@ reflection_resolve_custom_attribute_data (MonoReflectionMethod *ref_method, Mono
        domain = mono_object_domain (ref_method);
 
        if (!mono_class_init (method->klass)) {
-               mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (method->klass));
+               mono_error_set_for_class_failure (error, method->klass);
                goto leave;
        }
 
@@ -13952,7 +13952,7 @@ resolve_object (MonoImage *image, MonoObject *obj, MonoClass **handle_class, Mon
                return_val_if_nok (error, NULL);
                MonoClass *mc = mono_class_from_mono_type (type);
                if (!mono_class_init (mc)) {
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (mc));
+                       mono_error_set_for_class_failure (error, mc);
                        return NULL;
                }
 
index 84c21c5890e9dfedf73e95a441857fc6875f370a..e1e2eb19b430c0040972a551caad3acf31f757a0 100644 (file)
@@ -862,7 +862,7 @@ class_type_info (MonoDomain *domain, MonoClass *klass, MonoRgctxInfoType info_ty
        case MONO_RGCTX_INFO_STATIC_DATA: {
                MonoVTable *vtable = mono_class_vtable (domain, klass);
                if (!vtable) {
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+                       mono_error_set_for_class_failure (error, klass);
                        return NULL;
                }
                return mono_vtable_get_static_field_data (vtable);
@@ -874,7 +874,7 @@ class_type_info (MonoDomain *domain, MonoClass *klass, MonoRgctxInfoType info_ty
        case MONO_RGCTX_INFO_VTABLE: {
                MonoVTable *vtable = mono_class_vtable (domain, klass);
                if (!vtable) {
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (klass));
+                       mono_error_set_for_class_failure (error, klass);
                        return NULL;
                }
                return vtable;
@@ -1704,7 +1704,7 @@ instantiate_info (MonoDomain *domain, MonoRuntimeGenericContextInfoTemplate *oti
 
                vtable = mono_class_vtable (domain, method->method.method.klass);
                if (!vtable) {
-                       mono_error_set_exception_instance (error, mono_class_get_exception_for_failure (method->method.method.klass));
+                       mono_error_set_for_class_failure (error, method->method.method.klass);
                        return NULL;
                }