From ceac1590dfeaefe8ca59cf5088e632958862d7e9 Mon Sep 17 00:00:00 2001 From: "D.S. Qiu" Date: Wed, 24 Nov 2021 09:57:06 +0800 Subject: [PATCH 1/2] mono_runtime_delegate_invoke wrapper with MONO_ENTER_GC_UNSAFE/MONO_EXIT_GC_UNSAFE; mono_runtime_delegate_invoke wrapper with MONO_ENTER_GC_UNSAFE/MONO_EXIT_GC_UNSAFE; --- src/mono/mono/metadata/object.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/mono/mono/metadata/object.c b/src/mono/mono/metadata/object.c index 70f77b0495c49..1529e02ff92e2 100644 --- a/src/mono/mono/metadata/object.c +++ b/src/mono/mono/metadata/object.c @@ -3714,24 +3714,25 @@ mono_get_delegate_end_invoke_checked (MonoClass *klass, MonoError *error) MonoObject* mono_runtime_delegate_invoke (MonoObject *delegate, void **params, MonoObject **exc) { - MONO_REQ_GC_UNSAFE_MODE; - ERROR_DECL (error); + MonoObject* result = NULL; + MONO_ENTER_GC_UNSAFE; if (exc) { - MonoObject *result = mono_runtime_delegate_try_invoke (delegate, params, exc, error); + result = mono_runtime_delegate_try_invoke (delegate, params, exc, error); if (*exc) { mono_error_cleanup (error); - return NULL; + result = NULL; } else { if (!is_ok (error)) *exc = (MonoObject*)mono_error_convert_to_exception (error); - return result; } } else { MonoObject *result = mono_runtime_delegate_invoke_checked (delegate, params, error); mono_error_raise_exception_deprecated (error); /* OK to throw, external only without a good alternative */ - return result; + } + MONO_EXIT_GC_UNSAFE; + return result; } /** From a56b0cf7753191b14322008216d25163e9e31ef3 Mon Sep 17 00:00:00 2001 From: "D.S. Qiu" Date: Wed, 24 Nov 2021 10:12:43 +0800 Subject: [PATCH 2/2] Update object.c --- src/mono/mono/metadata/object.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/mono/metadata/object.c b/src/mono/mono/metadata/object.c index 1529e02ff92e2..7def77c718f46 100644 --- a/src/mono/mono/metadata/object.c +++ b/src/mono/mono/metadata/object.c @@ -3727,7 +3727,7 @@ mono_runtime_delegate_invoke (MonoObject *delegate, void **params, MonoObject ** *exc = (MonoObject*)mono_error_convert_to_exception (error); } } else { - MonoObject *result = mono_runtime_delegate_invoke_checked (delegate, params, error); + result = mono_runtime_delegate_invoke_checked (delegate, params, error); mono_error_raise_exception_deprecated (error); /* OK to throw, external only without a good alternative */ }