Merge pull request #5260 from BrzVlad/fix-handler-block
[mono.git] / mono / metadata / domain.c
index 7a12a7f4f727df945ec2a21815c6dbece75bce0b..de2a6970f73c52d51acec59ab9e4a6416549dab8 100644 (file)
@@ -386,19 +386,19 @@ mono_domain_create (void)
        }
        mono_appdomains_unlock ();
 
-#ifdef HAVE_BOEHM_GC
-       domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "domain object");
-#else
-       domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), domain_gc_desc, MONO_ROOT_SOURCE_DOMAIN, "domain object");
-       mono_gc_register_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED), G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_LAST_GC_TRACKED) - G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_FIRST_GC_TRACKED), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "misc domain fields");
-#endif
+       if (!mono_gc_is_moving ()) {
+               domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "domain object");
+       } else {
+               domain = (MonoDomain *)mono_gc_alloc_fixed (sizeof (MonoDomain), domain_gc_desc, MONO_ROOT_SOURCE_DOMAIN, "domain object");
+               mono_gc_register_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED), G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_LAST_GC_TRACKED) - G_STRUCT_OFFSET (MonoDomain, MONO_DOMAIN_FIRST_GC_TRACKED), MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, "misc domain fields");
+       }
        domain->shadow_serial = shadow_serial;
        domain->domain = NULL;
        domain->setup = NULL;
        domain->friendly_name = NULL;
        domain->search_path = NULL;
 
-       mono_profiler_appdomain_event (domain, MONO_PROFILE_START_LOAD);
+       MONO_PROFILER_RAISE (domain_loading, (domain));
 
        domain->mp = mono_mempool_new ();
        domain->code_mp = mono_code_manager_new ();
@@ -439,7 +439,7 @@ mono_domain_create (void)
        if (create_domain_hook)
                create_domain_hook (domain);
 
-       mono_profiler_appdomain_loaded (domain, MONO_PROFILE_OK);
+       MONO_PROFILER_RAISE (domain_loaded, (domain));
        
        return domain;
 }
@@ -464,7 +464,7 @@ mono_init_internal (const char *filename, const char *exe_filename, const char *
        MonoAssembly *ass = NULL;
        MonoImageOpenStatus status = MONO_IMAGE_OK;
        const MonoRuntimeInfo* runtimes [G_N_ELEMENTS (supported_runtimes) + 1] = { NULL };
-       int n, dummy;
+       int n;
 
 #ifdef DEBUG_DOMAIN_UNLOAD
        debug_domain_unload = TRUE;
@@ -501,7 +501,7 @@ mono_init_internal (const char *filename, const char *exe_filename, const char *
        mono_counters_register ("Max HashTable Chain Length", MONO_COUNTER_INT|MONO_COUNTER_METADATA, &mono_g_hash_table_max_chain_length);
 
        mono_gc_base_init ();
-       mono_thread_info_attach (&dummy);
+       mono_thread_info_attach ();
 
        mono_coop_mutex_init_recursive (&appdomains_mutex);
 
@@ -762,7 +762,7 @@ mono_init_internal (const char *filename, const char *exe_filename, const char *
 
        domain->friendly_name = g_path_get_basename (filename);
 
-       mono_profiler_appdomain_name (domain, domain->friendly_name);
+       MONO_PROFILER_RAISE (domain_name, (domain, domain->friendly_name));
 
        return domain;
 }
@@ -1033,7 +1033,7 @@ mono_domain_free (MonoDomain *domain, gboolean force)
        if (mono_dont_free_domains)
                return;
 
-       mono_profiler_appdomain_event (domain, MONO_PROFILE_START_UNLOAD);
+       MONO_PROFILER_RAISE (domain_unloading, (domain));
 
        mono_debug_domain_unload (domain);
 
@@ -1120,7 +1120,7 @@ mono_domain_free (MonoDomain *domain, gboolean force)
         * Send this after the assemblies have been unloaded and the domain is still in a 
         * usable state.
         */
-       mono_profiler_appdomain_event (domain, MONO_PROFILE_END_UNLOAD);
+       MONO_PROFILER_RAISE (domain_unloaded, (domain));
 
        if (free_domain_hook)
                free_domain_hook (domain);
@@ -1208,14 +1208,13 @@ mono_domain_free (MonoDomain *domain, gboolean force)
 
        domain->setup = NULL;
 
-       mono_gc_deregister_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED));
+       if (mono_gc_is_moving ())
+               mono_gc_deregister_root ((char*)&(domain->MONO_DOMAIN_FIRST_GC_TRACKED));
 
        mono_appdomains_lock ();
        appdomains_list [domain->domain_id] = NULL;
        mono_appdomains_unlock ();
 
-       /* FIXME: anything else required ? */
-
        mono_gc_free_fixed (domain);
 
 #ifndef DISABLE_PERFCOUNTERS