2006-08-31 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Thu, 31 Aug 2006 16:51:29 +0000 (16:51 -0000)
committerZoltan Varga <vargaz@gmail.com>
Thu, 31 Aug 2006 16:51:29 +0000 (16:51 -0000)
* marshal.c (mono_marshal_load_type_info): Revert the last change as it can't cope
with cycles in classes.

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

mono/metadata/ChangeLog
mono/metadata/marshal.c

index 5efd3d2575b9afa423a6d663650fd24039058da8..e8c2cd086298c27e12799845aa0f661fc044d65a 100644 (file)
@@ -1,5 +1,8 @@
 2006-08-31  Zoltan Varga  <vargaz@gmail.com>
 
+       * marshal.c (mono_marshal_load_type_info): Revert the last change as it can't cope
+       with cycles in classes.
+
        * icall.c (ves_icall_MonoType_get_Name): Add a '&' for byref types. Fixes #79110.
 
        * marshal.c (emit_marshal_array): Avoid crash when a parameter with type array is 
index 0449d06c5927b8b598ebcf115090211a0f65aba1..0a21ffda398e873c65c770b17841e0dff08d4426 100644 (file)
@@ -9229,7 +9229,7 @@ mono_marshal_load_type_info (MonoClass* klass)
 
        layout = klass->flags & TYPE_ATTRIBUTE_LAYOUT_MASK;
 
-       info = g_malloc0 (sizeof (MonoMarshalType) + sizeof (MonoMarshalField) * count);
+       klass->marshal_info = info = g_malloc0 (sizeof (MonoMarshalType) + sizeof (MonoMarshalField) * count);
        info->num_fields = count;
        
        /* Try to find a size for this type in metadata */
@@ -9303,14 +9303,6 @@ mono_marshal_load_type_info (MonoClass* klass)
        if (info->native_size != mono_class_value_size (klass, NULL))
                klass->blittable = FALSE;
 
-       mono_loader_lock ();
-       if (klass->marshal_info)
-               /* Another thread already initialized it */
-               g_free (info);
-       else
-               klass->marshal_info = info;
-       mono_loader_unlock ();
-
        /* If this is an array type, ensure that we have element info */
        if (klass->element_class) {
                mono_marshal_load_type_info (klass->element_class);