Wed Aug 29 18:37:37 CEST 2007 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / assembly.c
index 0360aae15b11f82f3dec6972fd661f9191aaf044..8c48fe7d241676e683927ff83e67b361770102be 100644 (file)
@@ -23,6 +23,7 @@
 #include <mono/metadata/class-internals.h>
 #include <mono/metadata/domain-internals.h>
 #include <mono/metadata/mono-endian.h>
+#include <mono/metadata/mono-debug.h>
 #include <mono/io-layer/io-layer.h>
 #include <mono/utils/mono-uri.h>
 #include <mono/metadata/mono-config.h>
@@ -1340,15 +1341,19 @@ mono_assembly_open_full (const char *filename, MonoImageOpenStatus *status, gboo
 }
 
 /*
- * load_friend_assemblies:
+ * mono_load_friend_assemblies:
  * @ass: an assembly
  *
  * Load the list of friend assemblies that are allowed to access
  * the assembly's internal types and members. They are stored as assembly
  * names in custom attributes.
+ *
+ * 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. 
  */
-static void
-load_friend_assemblies (MonoAssembly* ass)
+void
+mono_assembly_load_friends (MonoAssembly* ass)
 {
        int i;
        MonoCustomAttrInfo* attrs = mono_custom_attrs_from_assembly (ass);
@@ -1509,7 +1514,7 @@ mono_assembly_load_from_full (MonoImage *image, const char*fname,
 
        loaded_assemblies = g_list_prepend (loaded_assemblies, ass);
        if (mono_defaults.internals_visible_class)
-               load_friend_assemblies (ass);
+               mono_assembly_load_friends (ass);
        mono_assemblies_unlock ();
 
        mono_assembly_invoke_load_hook (ass);
@@ -2328,22 +2333,12 @@ mono_assembly_close (MonoAssembly *assembly)
 
        mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Unloading assembly %s [%p].", assembly->aname.name, assembly);
 
+       mono_debug_close_image (assembly->image);
+
        mono_assemblies_lock ();
        loaded_assemblies = g_list_remove (loaded_assemblies, assembly);
        mono_assemblies_unlock ();
 
-       if (assembly->image->references) {
-               int i;
-
-               for (i = 0; assembly->image->references [i]; i++) {
-                       if (assembly->image->references [i])
-                               mono_assembly_close (assembly->image->references [i]);
-               }
-
-               g_free (assembly->image->references);
-               assembly->image->references = NULL;
-       }
-
        assembly->image->assembly = NULL;
 
        mono_image_close (assembly->image);