Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@users.noreply.github.com>2017-03-02 02:15:56 +0300
committerGitHub <noreply@github.com>2017-03-02 02:15:56 +0300
commitd2a6ce3a93e6a54b7835262609580c4acc034fa9 (patch)
tree22e52e5e6d90504261f16e49d55e9daa1a98015c
parent4d7109cceb3d5d5f7abdea9448a7f71abd60c825 (diff)
parentef88a33d1c36393dc79c4cbc72a51d1f5ab0d6a7 (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.c9
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);