diff options
author | Zoltan Varga <vargaz@gmail.com> | 2019-11-20 21:56:09 +0300 |
---|---|---|
committer | monojenkins <jo.shields+jenkins@xamarin.com> | 2019-11-20 21:56:09 +0300 |
commit | 4961d411e7f6a425c4b7fad86b72f02947f9c817 (patch) | |
tree | f7ca0ac00cd88027e1832a8ae216298f020814e7 | |
parent | 27e6e812f14163d1cb6555803148947043065386 (diff) |
[interp] Move the freeing of interp method info into a callback. (#17852)
[interp] Move the freeing of interp method info into a callback.
-rw-r--r-- | mono/mini/ee.h | 3 | ||||
-rw-r--r-- | mono/mini/interp-stubs.c | 6 | ||||
-rw-r--r-- | mono/mini/interp/interp.c | 12 | ||||
-rw-r--r-- | mono/mini/mini-runtime.c | 6 |
4 files changed, 21 insertions, 6 deletions
diff --git a/mono/mini/ee.h b/mono/mini/ee.h index 5a0090d0f10..57ff732e5bd 100644 --- a/mono/mini/ee.h +++ b/mono/mini/ee.h @@ -15,7 +15,7 @@ #ifndef __MONO_EE_H__ #define __MONO_EE_H__ -#define MONO_EE_API_VERSION 0xd +#define MONO_EE_API_VERSION 0xe typedef struct _MonoInterpStackIter MonoInterpStackIter; @@ -31,6 +31,7 @@ typedef gpointer MonoInterpFrameHandle; MONO_EE_CALLBACK (void, to_native_trampoline, (gpointer addr, gpointer ccontext)) \ MONO_EE_CALLBACK (gpointer, create_method_pointer, (MonoMethod *method, gboolean compile, MonoError *error)) \ MONO_EE_CALLBACK (MonoFtnDesc*, create_method_pointer_llvmonly, (MonoMethod *method, gboolean unbox, MonoError *error)) \ + MONO_EE_CALLBACK (void, free_method, (MonoDomain *domain, MonoMethod *method)) \ MONO_EE_CALLBACK (MonoObject*, runtime_invoke, (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error)) \ MONO_EE_CALLBACK (void, init_delegate, (MonoDelegate *del, MonoError *error)) \ MONO_EE_CALLBACK (void, delegate_ctor, (MonoObjectHandle this_obj, MonoObjectHandle target, gpointer addr, MonoError *error)) \ diff --git a/mono/mini/interp-stubs.c b/mono/mini/interp-stubs.c index 28c4ed167d8..3bbc4011515 100644 --- a/mono/mini/interp-stubs.c +++ b/mono/mini/interp-stubs.c @@ -138,6 +138,12 @@ stub_create_method_pointer_llvmonly (MonoMethod *method, gboolean compile, MonoE return NULL; } +static void +stub_free_method (MonoDomain *domain, MonoMethod *method) +{ + g_assert_not_reached (); +} + static MonoObject* stub_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject **exc, MonoError *error) { diff --git a/mono/mini/interp/interp.c b/mono/mini/interp/interp.c index 2eaa272d0ae..7ccd3a8cf81 100644 --- a/mono/mini/interp/interp.c +++ b/mono/mini/interp/interp.c @@ -2829,6 +2829,18 @@ interp_create_method_pointer (MonoMethod *method, gboolean compile, MonoError *e #endif } +static void +interp_free_method (MonoDomain *domain, MonoMethod *method) +{ + MonoJitDomainInfo *info = domain_jit_info (domain); + + mono_domain_jit_code_hash_lock (domain); + /* InterpMethod is allocated in the domain mempool. We might haven't + * allocated an InterpMethod for this instance yet */ + mono_internal_hash_table_remove (&info->interp_code_hash, method); + mono_domain_jit_code_hash_unlock (domain); +} + #if COUNT_OPS static long opcode_counts[MINT_LASTOP]; diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c index 08f03227f88..3122bbe750e 100644 --- a/mono/mini/mini-runtime.c +++ b/mono/mini/mini-runtime.c @@ -2539,11 +2539,7 @@ mono_jit_free_method (MonoDomain *domain, MonoMethod *method) g_assert (method->dynamic); if (mono_use_interpreter) { - mono_domain_jit_code_hash_lock (domain); - /* InterpMethod is allocated in the domain mempool. We might haven't - * allocated an InterpMethod for this instance yet */ - mono_internal_hash_table_remove (&info->interp_code_hash, method); - mono_domain_jit_code_hash_unlock (domain); + mini_get_interp_callbacks ()->free_method (domain, method); } mono_domain_lock (domain); |