Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2019-11-20 21:56:09 +0300
committermonojenkins <jo.shields+jenkins@xamarin.com>2019-11-20 21:56:09 +0300
commit4961d411e7f6a425c4b7fad86b72f02947f9c817 (patch)
treef7ca0ac00cd88027e1832a8ae216298f020814e7
parent27e6e812f14163d1cb6555803148947043065386 (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.h3
-rw-r--r--mono/mini/interp-stubs.c6
-rw-r--r--mono/mini/interp/interp.c12
-rw-r--r--mono/mini/mini-runtime.c6
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);