[runtime] Use a single function to free the contents of MonoWrapperCaches. Remove...
authorRodrigo Kumpera <kumpera@gmail.com>
Tue, 28 Jul 2015 16:09:42 +0000 (12:09 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 29 Jul 2015 16:07:34 +0000 (12:07 -0400)
mono/metadata/image.c
mono/metadata/metadata-internals.h
mono/metadata/metadata.c

index 7045f4d05efec256289609edc29edbb0c1a65bfc..d28ea9627063e3f301f4c744e5549af0277dbb9f 100644 (file)
@@ -1491,6 +1491,34 @@ free_hash (GHashTable *hash)
                g_hash_table_destroy (hash);
 }
 
+void
+mono_wrapper_caches_free (MonoWrapperCaches *cache)
+{
+       free_hash (cache->delegate_invoke_cache);
+       free_hash (cache->delegate_begin_invoke_cache);
+       free_hash (cache->delegate_end_invoke_cache);
+       free_hash (cache->runtime_invoke_cache);
+       free_hash (cache->runtime_invoke_vtype_cache);
+       
+       free_hash (cache->delegate_abstract_invoke_cache);
+
+       free_hash (cache->runtime_invoke_direct_cache);
+       free_hash (cache->managed_wrapper_cache);
+
+       free_hash (cache->native_wrapper_cache);
+       free_hash (cache->native_wrapper_aot_cache);
+       free_hash (cache->native_wrapper_check_cache);
+       free_hash (cache->native_wrapper_aot_check_cache);
+
+       free_hash (cache->native_func_wrapper_aot_cache);
+       free_hash (cache->remoting_invoke_cache);
+       free_hash (cache->synchronized_cache);
+       free_hash (cache->unbox_wrapper_cache);
+       free_hash (cache->cominterop_invoke_cache);
+       free_hash (cache->cominterop_wrapper_cache);
+       free_hash (cache->thunk_invoke_cache);
+}
+
 /*
  * Returns whether mono_image_close_finish() must be called as well.
  * We must unload images in two steps because clearing the domain in
@@ -1650,24 +1678,7 @@ mono_image_close_except_pools (MonoImage *image)
        free_hash (image->native_func_wrapper_cache);
        free_hash (image->typespec_cache);
 
-       free_hash (image->wrapper_caches.native_wrapper_cache);
-       free_hash (image->wrapper_caches.native_wrapper_aot_cache);
-       free_hash (image->wrapper_caches.native_wrapper_check_cache);
-       free_hash (image->wrapper_caches.native_wrapper_aot_check_cache);
-       free_hash (image->wrapper_caches.managed_wrapper_cache);
-       free_hash (image->wrapper_caches.delegate_begin_invoke_cache);
-       free_hash (image->wrapper_caches.delegate_end_invoke_cache);
-       free_hash (image->wrapper_caches.delegate_invoke_cache);
-       free_hash (image->wrapper_caches.delegate_abstract_invoke_cache);
-       free_hash (image->wrapper_caches.remoting_invoke_cache);
-       free_hash (image->wrapper_caches.runtime_invoke_cache);
-       free_hash (image->wrapper_caches.runtime_invoke_vtype_cache);
-       free_hash (image->wrapper_caches.runtime_invoke_direct_cache);
-       free_hash (image->wrapper_caches.synchronized_cache);
-       free_hash (image->wrapper_caches.unbox_wrapper_cache);
-       free_hash (image->wrapper_caches.cominterop_invoke_cache);
-       free_hash (image->wrapper_caches.cominterop_wrapper_cache);
-       free_hash (image->wrapper_caches.thunk_invoke_cache);
+       mono_wrapper_caches_free (&image->wrapper_caches);
 
        for (i = 0; i < image->gshared_types_len; ++i)
                free_hash (image->gshared_types [i]);
index 6c1e56eec2b78dfccafcd43a1168857c122705cd..db204afa8c729c4672bb4fb60d328c8bc96277cd 100644 (file)
@@ -851,5 +851,8 @@ mono_get_method_checked (MonoImage *image, guint32 token, MonoClass *klass, Mono
 guint32
 mono_metadata_localscope_from_methoddef (MonoImage *meta, guint32 index);
 
+void
+mono_wrapper_caches_free (MonoWrapperCaches *cache);
+
 #endif /* __MONO_METADATA_INTERNALS_H__ */
 
index b0c7dfaee16301079f6742016f82fdde8046231b..f30f33b23782d19159874c2b1b75d7744ca0a47d 100644 (file)
@@ -2397,42 +2397,7 @@ delete_image_set (MonoImageSet *set)
        g_hash_table_destroy (set->gmethod_cache);
        g_hash_table_destroy (set->gsignature_cache);
 
-       if (set->wrapper_caches.delegate_abstract_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.delegate_abstract_invoke_cache);
-       if (set->wrapper_caches.runtime_invoke_direct_cache)
-               g_hash_table_destroy (set->wrapper_caches.runtime_invoke_direct_cache);
-       if (set->wrapper_caches.managed_wrapper_cache)
-               g_hash_table_destroy (set->wrapper_caches.managed_wrapper_cache);
-       if (set->wrapper_caches.native_wrapper_cache)
-               g_hash_table_destroy (set->wrapper_caches.native_wrapper_cache);
-       if (set->wrapper_caches.native_wrapper_aot_cache)
-               g_hash_table_destroy (set->wrapper_caches.native_wrapper_aot_cache);
-       if (set->wrapper_caches.native_wrapper_check_cache)
-               g_hash_table_destroy (set->wrapper_caches.native_wrapper_check_cache);
-       if (set->wrapper_caches.native_wrapper_aot_check_cache)
-               g_hash_table_destroy (set->wrapper_caches.native_wrapper_aot_check_cache);
-       if (set->wrapper_caches.native_func_wrapper_aot_cache)
-               g_hash_table_destroy (set->wrapper_caches.native_func_wrapper_aot_cache);
-       if (set->wrapper_caches.remoting_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.remoting_invoke_cache);
-       if (set->wrapper_caches.unbox_wrapper_cache)
-               g_hash_table_destroy (set->wrapper_caches.unbox_wrapper_cache);
-       if (set->wrapper_caches.cominterop_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.cominterop_invoke_cache);
-       if (set->wrapper_caches.cominterop_wrapper_cache)
-               g_hash_table_destroy (set->wrapper_caches.cominterop_wrapper_cache);
-       if (set->wrapper_caches.thunk_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.thunk_invoke_cache);
-       if (set->wrapper_caches.runtime_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.runtime_invoke_cache);
-       if (set->wrapper_caches.delegate_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.delegate_invoke_cache);
-       if (set->wrapper_caches.delegate_begin_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.delegate_begin_invoke_cache);
-       if (set->wrapper_caches.delegate_end_invoke_cache)
-               g_hash_table_destroy (set->wrapper_caches.delegate_end_invoke_cache);
-       if (set->wrapper_caches.synchronized_cache)
-               g_hash_table_destroy (set->wrapper_caches.synchronized_cache);
+       mono_wrapper_caches_free (&set->wrapper_caches);
 
        image_sets_lock ();