diff options
author | Zoltan Varga <vargaz@gmail.com> | 2016-01-14 18:11:55 +0300 |
---|---|---|
committer | Sebastien Pouliot <sebastien@xamarin.com> | 2016-01-15 22:49:54 +0300 |
commit | efae6a06ef2318e8d9eb0fb62ae349adbc399704 (patch) | |
tree | 1f87252b5345006b9dce8ecf598efd4f74e44a12 | |
parent | b8ca425234e011df15f0ad000a0ea60d8eb8b64e (diff) |
[runtime] Make sure ptr-to-structure and structure-and-ptr wrappers are unique, this is needed by full aot. Fixes #20186.mono-4.2.2.29
-rw-r--r-- | mono/metadata/marshal.c | 14 |
1 files 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; } |