Merge pull request #347 from JamesB7/master
[mono.git] / mono / metadata / domain.c
index 4a6e8596ccc1ccbc7aa5465adbfe804e631ff40d..d4aa1fc94b59f9bb64b814e7cbb9f5ac8f3b0ab3 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
  * Copyright 2004-2009 Novell, Inc (http://www.novell.com)
- * Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
+ * Copyright 2011-2012 Xamarin, Inc (http://www.xamarin.com)
  */
 
 #include <config.h>
@@ -1954,12 +1954,17 @@ mono_domain_free (MonoDomain *domain, gboolean force)
                        unregister_vtable_reflection_type (g_ptr_array_index (domain->class_vtable_array, i));
        }
 
+       for (tmp = domain->domain_assemblies; tmp; tmp = tmp->next) {
+               MonoAssembly *ass = tmp->data;
+               mono_assembly_release_gc_roots (ass);
+       }
+
        /* This needs to be done before closing assemblies */
        mono_gc_clear_domain (domain);
 
        for (tmp = domain->domain_assemblies; tmp; tmp = tmp->next) {
                MonoAssembly *ass = tmp->data;
-               mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Unloading domain %s[%p], assembly %s[%p], ref_count=%d\n", domain->friendly_name, domain, ass->aname.name, ass, ass->ref_count);
+               mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Unloading domain %s[%p], assembly %s[%p], ref_count=%d", domain->friendly_name, domain, ass->aname.name, ass, ass->ref_count);
                if (!mono_assembly_close_except_image_pools (ass))
                        tmp->data = NULL;
        }
@@ -2074,7 +2079,7 @@ mono_domain_free (MonoDomain *domain, gboolean force)
 
        mono_perfcounters->loader_appdomains--;
 
-       if ((domain == mono_root_domain))
+       if (domain == mono_root_domain)
                mono_root_domain = NULL;
 }