From 13380df8c7d3bfbabe221a7bcf7f50bb6ee674a4 Mon Sep 17 00:00:00 2001 From: Rodrigo Kumpera Date: Thu, 3 Nov 2016 07:48:36 -0700 Subject: [PATCH] [runtime] Wrap MonoClass::marshal_info with accessors. --- mono/metadata/class-accessors.c | 12 ++++++++++ mono/metadata/class-internals.h | 6 +++++ mono/metadata/marshal.c | 42 ++++++++++++++++----------------- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/mono/metadata/class-accessors.c b/mono/metadata/class-accessors.c index 53e67682d53..eb8d9f2cd9b 100644 --- a/mono/metadata/class-accessors.c +++ b/mono/metadata/class-accessors.c @@ -222,3 +222,15 @@ mono_class_set_field_count (MonoClass *klass, guint32 count) break; } } + +MonoMarshalType* +mono_class_get_marshal_info (MonoClass *class) +{ + return class->marshal_info; +} + +void +mono_class_set_marshal_info (MonoClass *class, MonoMarshalType *marshal_info) +{ + class->marshal_info = marshal_info; +} diff --git a/mono/metadata/class-internals.h b/mono/metadata/class-internals.h index afbae43bff6..5f92351018a 100644 --- a/mono/metadata/class-internals.h +++ b/mono/metadata/class-internals.h @@ -1494,6 +1494,12 @@ mono_class_get_field_count (MonoClass *klass); void mono_class_set_field_count (MonoClass *klass, guint32 count); +MonoMarshalType* +mono_class_get_marshal_info (MonoClass *class); + +void +mono_class_set_marshal_info (MonoClass *class, MonoMarshalType *marshal_info); + /*Now that everything has been defined, let's include the inline functions */ #include diff --git a/mono/metadata/marshal.c b/mono/metadata/marshal.c index 11b688dbea3..5433a033d39 100644 --- a/mono/metadata/marshal.c +++ b/mono/metadata/marshal.c @@ -9128,8 +9128,8 @@ mono_marshal_get_struct_to_ptr (MonoClass *klass) mono_marshal_load_type_info (klass); - if (klass->marshal_info->str_to_ptr) - return klass->marshal_info->str_to_ptr; + if (mono_class_get_marshal_info (klass)->str_to_ptr) + return mono_class_get_marshal_info (klass)->str_to_ptr; if (!stoptr) stoptr = mono_class_get_method_from_name (mono_defaults.marshal_class, "StructureToPtr", 3); @@ -9175,10 +9175,10 @@ mono_marshal_get_struct_to_ptr (MonoClass *klass) mono_mb_free (mb); mono_marshal_lock (); - if (!klass->marshal_info->str_to_ptr) - klass->marshal_info->str_to_ptr = res; + if (!mono_class_get_marshal_info (klass)->str_to_ptr) + mono_class_get_marshal_info (klass)->str_to_ptr = res; else - res = klass->marshal_info->str_to_ptr; + res = mono_class_get_marshal_info (klass)->str_to_ptr; mono_marshal_unlock (); return res; } @@ -9201,8 +9201,8 @@ mono_marshal_get_ptr_to_struct (MonoClass *klass) mono_marshal_load_type_info (klass); - if (klass->marshal_info->ptr_to_str) - return klass->marshal_info->ptr_to_str; + if (mono_class_get_marshal_info (klass)->ptr_to_str) + return mono_class_get_marshal_info (klass)->ptr_to_str; if (!ptostr) { MonoMethodSignature *sig; @@ -9253,10 +9253,10 @@ mono_marshal_get_ptr_to_struct (MonoClass *klass) mono_mb_free (mb); mono_marshal_lock (); - if (!klass->marshal_info->ptr_to_str) - klass->marshal_info->ptr_to_str = res; + if (!mono_class_get_marshal_info (klass)->ptr_to_str) + mono_class_get_marshal_info (klass)->ptr_to_str = res; else - res = klass->marshal_info->ptr_to_str; + res = mono_class_get_marshal_info (klass)->ptr_to_str; mono_marshal_unlock (); return res; } @@ -11233,7 +11233,7 @@ mono_marshal_is_loading_type_info (MonoClass *klass) /** * mono_marshal_load_type_info: * - * Initialize klass->marshal_info using information from metadata. This function can + * Initialize klass::marshal_info using information from metadata. This function can * recursively call itself, and the caller is responsible to avoid that by calling * mono_marshal_is_loading_type_info () beforehand. * @@ -11252,14 +11252,14 @@ mono_marshal_load_type_info (MonoClass* klass) g_assert (klass != NULL); - if (klass->marshal_info) - return klass->marshal_info; + if (mono_class_get_marshal_info (klass)) + return mono_class_get_marshal_info (klass); if (!klass->inited) mono_class_init (klass); - if (klass->marshal_info) - return klass->marshal_info; + if (mono_class_get_marshal_info (klass)) + return mono_class_get_marshal_info (klass); /* * This function can recursively call itself, so we keep the list of classes which are @@ -11381,15 +11381,15 @@ mono_marshal_load_type_info (MonoClass* klass) mono_native_tls_set_value (load_type_info_tls_id, loads_list); mono_marshal_lock (); - if (!klass->marshal_info) { + if (!mono_class_get_marshal_info (klass)) { /*We do double-checking locking on marshal_info */ mono_memory_barrier (); - klass->marshal_info = info; + mono_class_set_marshal_info (klass, info); ++class_marshal_info_count; } mono_marshal_unlock (); - return klass->marshal_info; + return mono_class_get_marshal_info (klass); } /** @@ -11402,7 +11402,7 @@ mono_marshal_load_type_info (MonoClass* klass) gint32 mono_class_native_size (MonoClass *klass, guint32 *align) { - if (!klass->marshal_info) { + if (!mono_class_get_marshal_info (klass)) { if (mono_marshal_is_loading_type_info (klass)) { if (align) *align = 0; @@ -11413,9 +11413,9 @@ mono_class_native_size (MonoClass *klass, guint32 *align) } if (align) - *align = klass->marshal_info->min_align; + *align = mono_class_get_marshal_info (klass)->min_align; - return klass->marshal_info->native_size; + return mono_class_get_marshal_info (klass)->native_size; } /* -- 2.25.1