+ mono_os_mutex_lock (&image->szarray_cache_lock);
+ cached = (MonoClass *)g_hash_table_lookup (image->szarray_cache, eclass);
+ mono_os_mutex_unlock (&image->szarray_cache_lock);
+ } else {
+ rootlist = (GSList *)g_hash_table_lookup (image->array_cache, eclass);
+ for (list = rootlist; list; list = list->next) {
+ k = (MonoClass *)list->data;
+ if ((k->rank == rank) && (k->byval_arg.type == (((rank > 1) || bounded) ? MONO_TYPE_ARRAY : MONO_TYPE_SZARRAY))) {
+ cached = k;
+ break;
+ }
+ }
+ }
+ if (cached) {
+ mono_loader_unlock ();
+ return cached;
+ }
+
+ mono_profiler_class_event (klass, MONO_PROFILE_START_LOAD);
+
+ classes_size += sizeof (MonoClassArray);
+ ++class_array_count;