diff options
author | Rodrigo Kumpera <kumpera@users.noreply.github.com> | 2017-03-02 02:15:56 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-02 02:15:56 +0300 |
commit | d2a6ce3a93e6a54b7835262609580c4acc034fa9 (patch) | |
tree | 22e52e5e6d90504261f16e49d55e9daa1a98015c | |
parent | 4d7109cceb3d5d5f7abdea9448a7f71abd60c825 (diff) | |
parent | ef88a33d1c36393dc79c4cbc72a51d1f5ab0d6a7 (diff) |
Merge pull request #4418 from kumpera/fix_gclass_recording_on_failure
[loader] When loading the parent of a GTD fails. We must disable gclass recording for it.
-rw-r--r-- | mono/metadata/class.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/mono/metadata/class.c b/mono/metadata/class.c index 973bfc4ce64..0d0952b0c9f 100644 --- a/mono/metadata/class.c +++ b/mono/metadata/class.c @@ -5419,6 +5419,12 @@ mono_class_setup_supertypes (MonoClass *klass) } static gboolean +discard_gclass_due_to_failure (MonoClass *gclass, void *user_data) +{ + return mono_class_get_generic_class (gclass)->container_class == user_data; +} + +static gboolean fix_gclass_incomplete_instantiation (MonoClass *gclass, void *user_data) { MonoClass *gtd = (MonoClass*)user_data; @@ -5711,6 +5717,9 @@ mono_class_create_from_typedef (MonoImage *image, guint32 type_token, MonoError return klass; parent_failure: + if (mono_class_is_gtd (klass)) + disable_gclass_recording (discard_gclass_due_to_failure, klass); + mono_class_setup_mono_type (klass); mono_loader_unlock (); mono_profiler_class_loaded (klass, MONO_PROFILE_FAILED); |