2008-06-11 Zoltan Varga <vargaz@gmail.com>
+ * assembly.c (mono_assembly_load_from_full): Call
+ mono_assembly_load_friends () outside the assemblies lock, since it can
+ acquire the loader lock. Fixes #323696.
+
* reflection.c (resolve_object): Inflate the inst with the context for
FieldOnTypeBuilderInst. Fixes #399010.
* This is an internal method, we need this because when we load mscorlib
* we do not have the mono_defaults.internals_visible_class loaded yet,
* so we need to load these after we initialize the runtime.
+ *
+ * LOCKING: Acquires the assemblies lock plus the loader lock.
*/
void
mono_assembly_load_friends (MonoAssembly* ass)
aname = g_new0 (MonoAssemblyName, 1);
/*g_print ("friend ass: %s\n", data);*/
if (mono_assembly_name_parse_full (data, aname, TRUE, NULL, NULL)) {
+ mono_assemblies_lock ();
ass->friend_assembly_names = g_slist_prepend (ass->friend_assembly_names, aname);
+ mono_assemblies_unlock ();
} else {
g_free (aname);
}
image->assembly = ass;
loaded_assemblies = g_list_prepend (loaded_assemblies, ass);
+ mono_assemblies_unlock ();
+
if (mono_defaults.internals_visible_class)
mono_assembly_load_friends (ass);
#ifdef PLATFORM_WIN32
if (image->is_module_handle)
mono_image_fixup_vtable (image);
#endif
- mono_assemblies_unlock ();
mono_assembly_invoke_load_hook (ass);