From 1009c92386c68c721f6fe508a530af521ada722d Mon Sep 17 00:00:00 2001 From: vkargov Date: Thu, 18 May 2017 11:08:58 -0700 Subject: [PATCH] [aot] Fix a memory leak related to constraint allocation/deallocation. (#4880) * [jit] Make a copy of the constraint in mini_get_shared_gparam(). * [aot] Free the temporary gshared constraint in decode_class_ref(). --- mono/mini/aot-runtime.c | 1 + mono/mini/mini-generic-sharing.c | 1 + 2 files changed, 2 insertions(+) diff --git a/mono/mini/aot-runtime.c b/mono/mini/aot-runtime.c index d5ae8dbeece..782106c45e1 100644 --- a/mono/mini/aot-runtime.c +++ b/mono/mini/aot-runtime.c @@ -505,6 +505,7 @@ decode_klass_ref (MonoAotModule *module, guint8 *buf, guint8 **endbuf, MonoError return NULL; t = mini_get_shared_gparam (&par_klass->byval_arg, gshared_constraint); + mono_metadata_free_type (gshared_constraint); klass = mono_class_from_mono_type (t); } else { int type = decode_value (p, &p); diff --git a/mono/mini/mini-generic-sharing.c b/mono/mini/mini-generic-sharing.c index d7475aebd3a..5ef3b350bf0 100644 --- a/mono/mini/mini-generic-sharing.c +++ b/mono/mini/mini-generic-sharing.c @@ -3498,6 +3498,7 @@ mini_get_shared_gparam (MonoType *t, MonoType *constraint) copy = (MonoGSharedGenericParam *)mono_image_alloc0 (image, sizeof (MonoGSharedGenericParam)); memcpy (©->param, par, sizeof (MonoGenericParamFull)); copy->param.info.pklass = NULL; + constraint = mono_metadata_type_dup (image, constraint); name = get_shared_gparam_name (constraint->type, ((MonoGenericParamFull*)copy)->info.name); copy->param.info.name = mono_image_strdup (image, name); g_free (name); -- 2.25.1