From 1de3239d7bdb0a648cd9e6e87f4dcc7555032622 Mon Sep 17 00:00:00 2001 From: Jonathan Chambers Date: Wed, 1 Feb 2017 14:58:23 -0500 Subject: [PATCH] Send assembly and type load events in the domain that contains them rather than the root domain in the attach/defer case. (#4314) --- mono/mini/debugger-agent.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/mono/mini/debugger-agent.c b/mono/mini/debugger-agent.c index 518216b41d2..f64481d661f 100644 --- a/mono/mini/debugger-agent.c +++ b/mono/mini/debugger-agent.c @@ -4020,14 +4020,41 @@ send_type_load (MonoClass *klass) static void send_types_for_domain (MonoDomain *domain, void *user_data) { + MonoDomain* old_domain; AgentDomainInfo *info = NULL; info = get_agent_domain_info (domain); g_assert (info); + + old_domain = mono_domain_get (); + + mono_domain_set (domain, TRUE); mono_loader_lock (); g_hash_table_foreach (info->loaded_classes, emit_type_load, NULL); mono_loader_unlock (); + + mono_domain_set (old_domain, TRUE); +} + +static void +send_assemblies_for_domain (MonoDomain *domain, void *user_data) +{ + GSList *tmp; + MonoDomain* old_domain; + + old_domain = mono_domain_get (); + + mono_domain_set (domain, TRUE); + + mono_domain_assemblies_lock (domain); + for (tmp = domain->domain_assemblies; tmp; tmp = tmp->next) { + MonoAssembly* ass = (MonoAssembly *)tmp->data; + emit_assembly_load (ass, NULL); + } + mono_domain_assemblies_unlock (domain); + + mono_domain_set (old_domain, TRUE); } static void @@ -7822,7 +7849,7 @@ event_commands (int command, guint8 *p, guint8 *end, Buffer *buf) break; case EVENT_KIND_ASSEMBLY_LOAD: /* Emit load events for currently loaded assemblies */ - mono_assembly_foreach (emit_assembly_load, NULL); + mono_domain_foreach (send_assemblies_for_domain, NULL); break; case EVENT_KIND_THREAD_START: /* Emit start events for currently started threads */ -- 2.25.1