Thu Jun 25 15:48:09 CEST 2009 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Thu, 25 Jun 2009 13:51:47 +0000 (13:51 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Thu, 25 Jun 2009 13:51:47 +0000 (13:51 -0000)
* reflection.c: in mono_method_clear_object () really ensure all the
objects are removed.

svn path=/trunk/mono/; revision=136834

mono/metadata/ChangeLog
mono/metadata/reflection.c

index 514d0dd4cd995c12b1681654dca0349b93a53c28..2da297cee0aa9cbd6ba7a11c0e06ab5f36300513 100644 (file)
@@ -1,3 +1,9 @@
+
+Thu Jun 25 15:48:09 CEST 2009 Paolo Molaro <lupus@ximian.com>
+
+       * reflection.c: in mono_method_clear_object () really ensure all the
+       objects are removed.
+
 2009-06-24 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * loader.c (mono_method_signature): Call into the verifier to check
index 00c92b3b91c2103a8c058678c75419a1121c6350..4b68dec62d640b6d59750d13bfca8f9e753b1538 100644 (file)
@@ -6285,11 +6285,21 @@ mono_method_get_object (MonoDomain *domain, MonoMethod *method, MonoClass *refcl
 void
 mono_method_clear_object (MonoDomain *domain, MonoMethod *method)
 {
+       MonoClass *klass;
        g_assert (method->dynamic);
 
-       clear_cached_object (domain, method, method->klass);
+       klass = method->klass;
+       while (klass) {
+               clear_cached_object (domain, method, klass);
+               klass = klass->parent;
+       }
        /* Added by mono_param_get_objects () */
        clear_cached_object (domain, &(method->signature), NULL);
+       klass = method->klass;
+       while (klass) {
+               clear_cached_object (domain, &(method->signature), klass);
+               klass = klass->parent;
+       }
 }
 
 /*