From fa7d049aad0261f8ed6c0584f1ccf2ad08aec23c Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Wed, 28 Dec 2022 13:20:56 -0500 Subject: [PATCH] [mono] Reuse handles inside a loop in reflection_create_dynamic_method (). (#79716) This fixes the 'reflection_create_dynamic_method USED x handles' warnings. --- src/mono/mono/metadata/sre.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mono/mono/metadata/sre.c b/src/mono/mono/metadata/sre.c index 36a58f012a6e9..b8f2e6a7a88cf 100644 --- a/src/mono/mono/metadata/sre.c +++ b/src/mono/mono/metadata/sre.c @@ -3949,6 +3949,7 @@ reflection_create_dynamic_method (MonoReflectionDynamicMethodHandle ref_mb, Mono gboolean ret = TRUE; MonoReflectionDynamicMethod *mb; MonoAssembly *ass = NULL; + MonoObjectHandle ref_handle = MONO_HANDLE_NEW (MonoObject, NULL); error_init (error); @@ -3977,8 +3978,11 @@ reflection_create_dynamic_method (MonoReflectionDynamicMethodHandle ref_mb, Mono for (gint32 i = 0; i < mb->nrefs; i += 2) { MonoClass *handle_class; gpointer ref; - MonoObject *obj = mono_array_get_internal (mb->refs, MonoObject*, i); - MONO_HANDLE_PIN (obj); + MonoObject *obj; + + obj = mono_array_get_internal (mb->refs, MonoObject*, i); + /* Reuse the handle since we are inside a loop */ + MONO_HANDLE_ASSIGN_RAW (ref_handle, obj); if (strcmp (obj->vtable->klass->name, "DynamicMethod") == 0) { MonoReflectionDynamicMethod *method = (MonoReflectionDynamicMethod*)obj;