Ver código fonte

[runtime] Make sure ptr-to-structure and structure-and-ptr wrappers are unique, this is needed by full aot. Fixes #20186.

Zoltan Varga 10 anos atrás
pai
commit
97d9498c0e
1 arquivos alterados com 12 adições e 2 exclusões
  1. 12 2
      mono/metadata/marshal.c

+ 12 - 2
mono/metadata/marshal.c

@@ -8686,7 +8686,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;
 }
 
@@ -8760,7 +8765,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;
 }