From efae6a06ef2318e8d9eb0fb62ae349adbc399704 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Thu, 14 Jan 2016 10:11:55 -0500 Subject: [runtime] Make sure ptr-to-structure and structure-and-ptr wrappers are unique, this is needed by full aot. Fixes #20186. --- mono/metadata/marshal.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mono/metadata/marshal.c b/mono/metadata/marshal.c index 75f6e47be02..f49032b6fbc 100644 --- a/mono/metadata/marshal.c +++ b/mono/metadata/marshal.c @@ -8591,7 +8591,12 @@ mono_marshal_get_struct_to_ptr (MonoClass *klass) res = mono_mb_create (mb, mono_signature_no_pinvoke (stoptr), 0, info); mono_mb_free (mb); - klass->marshal_info->str_to_ptr = res; + mono_marshal_lock (); + if (!klass->marshal_info->str_to_ptr) + klass->marshal_info->str_to_ptr = res; + else + res = klass->marshal_info->str_to_ptr; + mono_marshal_unlock (); return res; } @@ -8665,7 +8670,12 @@ mono_marshal_get_ptr_to_struct (MonoClass *klass) res = mono_mb_create (mb, ptostr, 0, info); mono_mb_free (mb); - klass->marshal_info->ptr_to_str = res; + mono_marshal_lock (); + if (!klass->marshal_info->ptr_to_str) + klass->marshal_info->ptr_to_str = res; + else + res = klass->marshal_info->ptr_to_str; + mono_marshal_unlock (); return res; } -- cgit v1.2.3