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