+ if (image->dynamic) {
+ /* Dynamic images are GC_MALLOCed */
+ g_free ((char*)image->module_name);
+ mono_dynamic_image_free ((MonoDynamicImage*)image);
+ }
+
+ mono_profiler_module_event (image, MONO_PROFILE_END_UNLOAD);
+
+ return TRUE;
+}
+
+void
+mono_image_close_finish (MonoImage *image)
+{
+ int i;
+ GSList *l;
+
+ for (l = image->reflection_info_unregister_classes; l; l = l->next)
+ g_free (l->data);
+ g_slist_free (image->reflection_info_unregister_classes);
+ image->reflection_info_unregister_classes = NULL;
+
+ if (image->references && !image->dynamic) {
+ MonoTableInfo *t = &image->tables [MONO_TABLE_ASSEMBLYREF];
+ int i;
+
+ for (i = 0; i < t->rows; i++) {
+ if (image->references [i] && image->references [i] != REFERENCE_MISSING)
+ mono_assembly_close_finish (image->references [i]);
+ }
+
+ g_free (image->references);
+ image->references = NULL;
+ }
+
+ for (i = 0; i < image->module_count; ++i) {
+ if (image->modules [i])
+ mono_image_close_finish (image->modules [i]);
+ }
+ if (image->modules)
+ g_free (image->modules);
+
+ mono_perfcounters->loader_bytes -= mono_mempool_get_allocated (image->mempool);
+