projects
/
mono.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e523f24
)
[jit] Fix memory leak in trampoline info registration. (#4775)
author
vkargov
<kargov@gmail.com>
Wed, 3 May 2017 20:28:58 +0000
(13:28 -0700)
committer
Ludovic Henry
<ludovic@xamarin.com>
Wed, 3 May 2017 20:28:58 +0000
(16:28 -0400)
mono/mini/mini-runtime.c
patch
|
blob
|
history
diff --git
a/mono/mini/mini-runtime.c
b/mono/mini/mini-runtime.c
index 5085233d27ab9376bac85309f92de891999adf9a..55275e0cade3f739c4a800bc1bda10f6e571f48a 100644
(file)
--- 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 ();
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);
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;
}
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);
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
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);
register_trampoline_jit_info (domain, copy);
+ }
if (mono_jit_map_is_enabled ())
mono_emit_jit_tramp (info->code, info->code_size, info->name);
if (mono_jit_map_is_enabled ())
mono_emit_jit_tramp (info->code, info->code_size, info->name);