[runtime] Move the initialization of class->has_finalize into mono_class_has_finalize...
authorZoltan Varga <vargaz@gmail.com>
Fri, 18 Jul 2014 11:15:38 +0000 (13:15 +0200)
committerZoltan Varga <vargaz@gmail.com>
Mon, 1 Sep 2014 15:40:54 +0000 (11:40 -0400)
mono/metadata/class.c

index b983026cf7a64b6db0daf4b29acbd11554a18de0..d53d264fa53ccd770656e8edd645217764e3ef3e 100644 (file)
@@ -5069,14 +5069,11 @@ mono_class_init (MonoClass *class)
                } else {
                        class->vtable_size = szarray_vtable_size[slot];
                }
-               class->has_finalize_inited = TRUE;
        } else if (class->generic_class && !MONO_CLASS_IS_INTERFACE (class)) {
                MonoClass *gklass = class->generic_class->container_class;
 
                /* Generic instance case */
                class->ghcimpl = gklass->ghcimpl;
-               class->has_finalize = mono_class_has_finalizer (gklass);
-               class->has_finalize_inited = TRUE;
                class->has_cctor = gklass->has_cctor;
 
                mono_class_setup_vtable (gklass);
@@ -5203,7 +5200,12 @@ mono_class_has_finalizer (MonoClass *klass)
        if (!(MONO_CLASS_IS_INTERFACE (class) || class->valuetype)) {
                MonoMethod *cmethod = NULL;
 
-               if (class->parent && class->parent->has_finalize) {
+               if (class->rank == 1 && class->byval_arg.type == MONO_TYPE_SZARRAY) {
+               } else if (class->generic_class) {
+                       MonoClass *gklass = class->generic_class->container_class;
+
+                       has_finalize = mono_class_has_finalizer (gklass);
+               } else if (class->parent && class->parent->has_finalize) {
                        has_finalize = TRUE;
                } else {
                        if (class->parent) {