diff --git a/src/mono/mono/metadata/domain.c b/src/mono/mono/metadata/domain.c index bb40725ac1f40..d280e30982144 100644 --- a/src/mono/mono/metadata/domain.c +++ b/src/mono/mono/metadata/domain.c @@ -1175,6 +1175,12 @@ mono_domain_free (MonoDomain *domain, gboolean force) g_slist_free (domain->domain_assemblies); domain->domain_assemblies = NULL; + /* + * 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); + if (free_domain_hook) free_domain_hook (domain); diff --git a/src/mono/mono/metadata/gc.c b/src/mono/mono/metadata/gc.c index 46eaf5e224af7..ae4329be66686 100644 --- a/src/mono/mono/metadata/gc.c +++ b/src/mono/mono/metadata/gc.c @@ -560,8 +560,6 @@ mono_domain_finalize (MonoDomain *domain, guint32 timeout) mono_gc_finalize_threadpool_threads (); } - mono_profiler_appdomain_event (domain, MONO_PROFILE_END_UNLOAD); - done: if (InterlockedDecrement (&req->ref) == 0) { mono_coop_sem_destroy (&req->done); diff --git a/src/mono/mono/metadata/profiler.c b/src/mono/mono/metadata/profiler.c index 99c490fb75d1c..0fd162dd98a86 100644 --- a/src/mono/mono/metadata/profiler.c +++ b/src/mono/mono/metadata/profiler.c @@ -968,7 +968,7 @@ mono_profiler_install_gc_finalize (MonoProfileGCFinalizeFunc begin, MonoProfileG prof_list->gc_finalize_begin = begin; prof_list->gc_finalize_object_begin = begin_obj; - prof_list->gc_finalize_object_begin = end_obj; + prof_list->gc_finalize_object_end = end_obj; prof_list->gc_finalize_end = end; }