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:
-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;
}