Author: lupus
Date: 2005-03-22 10:09:40 -0500 (Tue, 22 Mar 2005)
New Revision: 42110

Modified:
   trunk/mono/mono/metadata/ChangeLog
   trunk/mono/mono/metadata/reflection.c
Log:


Tue Mar 22 16:34:29 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>

        * reflection.c: some locking fixes.



Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog  2005-03-22 15:05:01 UTC (rev 42109)
+++ trunk/mono/mono/metadata/ChangeLog  2005-03-22 15:09:40 UTC (rev 42110)
@@ -1,4 +1,8 @@
 
+Tue Mar 22 16:34:29 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>
+
+       * reflection.c: some locking fixes.
+
 Tue Mar 22 15:13:54 CET 2005 Paolo Molaro <[EMAIL PROTECTED]>
 
        * metadata.c: added missing break in case statement.

Modified: trunk/mono/mono/metadata/reflection.c
===================================================================
--- trunk/mono/mono/metadata/reflection.c       2005-03-22 15:05:01 UTC (rev 
42109)
+++ trunk/mono/mono/metadata/reflection.c       2005-03-22 15:09:40 UTC (rev 
42110)
@@ -7425,6 +7425,8 @@
 
        MONO_ARCH_SAVE_REGS;
 
+       mono_loader_lock ();
+
        if (tb->parent) {
                /* check so we can compile corlib correctly */
                if (strcmp (mono_object_class (tb->parent)->name, 
"TypeBuilder") == 0) {
@@ -7446,6 +7448,7 @@
                klass->supertypes = NULL;
                mono_class_setup_parent (klass, parent);
                mono_class_setup_mono_type (klass);
+               mono_loader_unlock ();
                return;
        }
        
@@ -7502,6 +7505,8 @@
        }
 
        /*g_print ("setup %s as %s (%p)\n", klass->name, 
((MonoObject*)tb)->vtable->klass->name, tb);*/
+
+       mono_loader_unlock ();
 }
 
 /*
@@ -7579,6 +7584,7 @@
 
        klass = my_mono_class_from_mono_type (tb->type.type);
 
+       mono_loader_lock ();
        if (klass->enumtype && klass->enum_basetype == NULL) {
                MonoReflectionFieldBuilder *fb;
                MonoClass *ec;
@@ -7606,6 +7612,7 @@
                /* FIXME: Does this mean enums can't have method overrides ? */
                mono_class_setup_vtable_general (klass, NULL, 0);
        }
+       mono_loader_unlock ();
 }
 
 static MonoMarshalSpec*
@@ -8679,6 +8686,11 @@
 
        mono_save_custom_attrs (klass->image, klass, tb->cattrs);
 
+       mono_loader_lock ();
+       if (klass->wastypebuilder) {
+               mono_loader_unlock ();
+               return mono_type_get_object (mono_object_domain (tb), 
&klass->byval_arg);
+       }
        /*
         * Fields to set in klass:
         * the various flags: delegate/unicode/contextbound etc.
@@ -8691,6 +8703,7 @@
                if (klass->generic_container) {
                        /* FIXME: The code below can't handle generic classes */
                        klass->wastypebuilder = TRUE;
+                       mono_loader_unlock ();
                        return mono_type_get_object (mono_object_domain (tb), 
&klass->byval_arg);
                }
        }
@@ -8730,6 +8743,7 @@
        typebuilder_setup_events (klass);
 
        klass->wastypebuilder = TRUE;
+       mono_loader_unlock ();
 
        res = mono_type_get_object (mono_object_domain (tb), &klass->byval_arg);
        g_assert (res != (MonoReflectionType*)tb);

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to