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/3] 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 70f77b0495c495..1529e02ff92e2a 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/3] 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 1529e02ff92e2a..7def77c718f468 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 */ } From 6590fe73f590c9b56df0daa04a73f24fe021b4be Mon Sep 17 00:00:00 2001 From: "D.S. Qiu" Date: Fri, 26 Nov 2021 14:49:47 +0800 Subject: [PATCH 3/3] Update AssemblyLoadContext.Mono.cs --- .../src/System/Runtime/Loader/AssemblyLoadContext.Mono.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mono/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.Mono.cs b/src/mono/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.Mono.cs index f646ccb652f0b3..c920d8b6f6639e 100644 --- a/src/mono/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.Mono.cs +++ b/src/mono/System.Private.CoreLib/src/System/Runtime/Loader/AssemblyLoadContext.Mono.cs @@ -12,6 +12,7 @@ namespace System.Runtime.Loader { + [StructLayout(LayoutKind.Sequential)] public partial class AssemblyLoadContext { internal IntPtr NativeALC