From: vkargov Date: Wed, 3 May 2017 20:28:58 +0000 (-0700) Subject: [jit] Fix memory leak in trampoline info registration. (#4775) X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=commitdiff_plain;h=d24633b39c15ae89e5b0e67e425438c3d59751de [jit] Fix memory leak in trampoline info registration. (#4775) --- diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c index 5085233d27a..55275e0cade 100644 --- a/mono/mini/mini-runtime.c +++ b/mono/mini/mini-runtime.c @@ -484,7 +484,11 @@ mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboo if (!domain) domain = mono_get_root_domain (); - copy = g_new0 (MonoTrampInfo, 1); + if (domain) + copy = mono_domain_alloc0 (domain, sizeof (MonoTrampInfo)); + else + copy = g_new0 (MonoTrampInfo, 1); + copy->code = info->code; copy->code_size = info->code_size; copy->name = g_strdup (info->name); @@ -498,10 +502,6 @@ mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboo copy->uw_info_len = info->uw_info_len; } - mono_jit_lock (); - tramp_infos = g_slist_prepend (tramp_infos, copy); - mono_jit_unlock (); - mono_save_trampoline_xdebug_info (info); mono_lldb_save_trampoline_info (info); @@ -510,9 +510,15 @@ mono_tramp_info_register_internal (MonoTrampInfo *info, MonoDomain *domain, gboo mono_arch_unwindinfo_install_tramp_unwind_info (info->unwind_ops, info->code, info->code_size); #endif - /* Only register trampolines that have unwind infos */ - if (mono_get_root_domain () && copy->uw_info) + if (!domain) { + /* If no root domain has been created yet, postpone the registration. */ + mono_jit_lock (); + tramp_infos = g_slist_prepend (tramp_infos, copy); + mono_jit_unlock (); + } else if (copy->uw_info) { + /* Only register trampolines that have unwind infos */ register_trampoline_jit_info (domain, copy); + } if (mono_jit_map_is_enabled ()) mono_emit_jit_tramp (info->code, info->code_size, info->name);