mono_marshal_load_type_info (klass);
- if (mono_class_get_marshal_info (klass)->str_to_ptr)
- return mono_class_get_marshal_info (klass)->str_to_ptr;
+ MonoMarshalType *marshal_info = mono_class_get_marshal_info (klass);
+ if (marshal_info->str_to_ptr)
+ return marshal_info->str_to_ptr;
if (!stoptr)
stoptr = mono_class_get_method_from_name (mono_defaults.marshal_class, "StructureToPtr", 3);
mono_mb_free (mb);
mono_marshal_lock ();
- if (!mono_class_get_marshal_info (klass)->str_to_ptr)
- mono_class_get_marshal_info (klass)->str_to_ptr = res;
+ if (!marshal_info->str_to_ptr)
+ marshal_info->str_to_ptr = res;
else
- res = mono_class_get_marshal_info (klass)->str_to_ptr;
+ res = marshal_info->str_to_ptr;
mono_marshal_unlock ();
return res;
}
mono_marshal_load_type_info (klass);
- if (mono_class_get_marshal_info (klass)->ptr_to_str)
- return mono_class_get_marshal_info (klass)->ptr_to_str;
+ MonoMarshalType *marshal_info = mono_class_get_marshal_info (klass);
+ if (marshal_info->ptr_to_str)
+ return marshal_info->ptr_to_str;
if (!ptostr) {
MonoMethodSignature *sig;
mono_mb_free (mb);
mono_marshal_lock ();
- if (!mono_class_get_marshal_info (klass)->ptr_to_str)
- mono_class_get_marshal_info (klass)->ptr_to_str = res;
+ if (!marshal_info->ptr_to_str)
+ marshal_info->ptr_to_str = res;
else
- res = mono_class_get_marshal_info (klass)->ptr_to_str;
+ res = marshal_info->ptr_to_str;
mono_marshal_unlock ();
return res;
}
g_assert (klass != NULL);
- if (mono_class_get_marshal_info (klass))
- return mono_class_get_marshal_info (klass);
+ info = mono_class_get_marshal_info (klass);
+ if (info)
+ return info;
if (!klass->inited)
mono_class_init (klass);
- if (mono_class_get_marshal_info (klass))
- return mono_class_get_marshal_info (klass);
+ info = mono_class_get_marshal_info (klass);
+ if (info)
+ return info;
/*
* This function can recursively call itself, so we keep the list of classes which are
mono_native_tls_set_value (load_type_info_tls_id, loads_list);
mono_marshal_lock ();
- if (!mono_class_get_marshal_info (klass)) {
+ MonoMarshalType *info2 = mono_class_get_marshal_info (klass);
+ if (!info2) {
/*We do double-checking locking on marshal_info */
mono_memory_barrier ();
mono_class_set_marshal_info (klass, info);
++class_marshal_info_count;
+ info2 = info;
}
mono_marshal_unlock ();
- return mono_class_get_marshal_info (klass);
+ return info2;
}
/**
*/
gint32
mono_class_native_size (MonoClass *klass, guint32 *align)
-{
- if (!mono_class_get_marshal_info (klass)) {
+{
+ MonoMarshalType *info = mono_class_get_marshal_info (klass);
+ if (!info) {
if (mono_marshal_is_loading_type_info (klass)) {
if (align)
*align = 0;
} else {
mono_marshal_load_type_info (klass);
}
+ info = mono_class_get_marshal_info (klass);
}
if (align)
- *align = mono_class_get_marshal_info (klass)->min_align;
+ *align = info->min_align;
- return mono_class_get_marshal_info (klass)->native_size;
+ return info->native_size;
}
/*