Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2016-01-14 18:11:55 +0300
committerSebastien Pouliot <sebastien@xamarin.com>2016-01-15 22:49:54 +0300
commitefae6a06ef2318e8d9eb0fb62ae349adbc399704 (patch)
tree1f87252b5345006b9dce8ecf598efd4f74e44a12
parentb8ca425234e011df15f0ad000a0ea60d8eb8b64e (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.c14
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;
}