From: Rodrigo Kumpera Date: Wed, 1 Mar 2017 23:15:56 +0000 (-0500) Subject: Merge pull request #4418 from kumpera/fix_gclass_recording_on_failure X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=d2a6ce3a93e6a54b7835262609580c4acc034fa9;hp=4d7109cceb3d5d5f7abdea9448a7f71abd60c825;p=mono.git 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. --- 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 @@ -5418,6 +5418,12 @@ mono_class_setup_supertypes (MonoClass *klass) mono_loader_unlock (); } +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) { @@ -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);