if (image->property_hash)
mono_property_hash_destroy (image->property_hash);
- g_slist_free (image->reflection_info_unregister_classes);
+ /*
+ reflection_info_unregister_classes is only required by dynamic images, which will not be properly
+ cleared during shutdown as we don't perform regular appdomain unload for the root one.
+ */
+ g_assert (!image->reflection_info_unregister_classes || mono_runtime_is_shutting_down ());
image->reflection_info_unregister_classes = NULL;
if (image->interface_bitset) {
mono_image_close_finish (MonoImage *image)
{
int i;
- GSList *l;
-
- for (l = image->reflection_info_unregister_classes; l; l = l->next)
- g_free (l->data);
- g_slist_free (image->reflection_info_unregister_classes);
- image->reflection_info_unregister_classes = NULL;
if (image->references && !image->dynamic) {
for (i = 0; i < image->nreferences; i++) {
mono_property_hash_remove_object (image->property_hash, subject);
mono_image_unlock (image);
}
+
+void
+mono_image_append_class_to_reflection_info_set (MonoClass *class)
+{
+ MonoImage *image = class->image;
+ mono_image_lock (image);
+ image->reflection_info_unregister_classes = g_slist_prepend_mempool (image->mempool, image->reflection_info_unregister_classes, class);
+ mono_image_unlock (image);
+}
void
mono_remove_image_unload_hook (MonoImageUnloadFunc func, gpointer user_data) MONO_INTERNAL;
+void
+mono_image_append_class_to_reflection_info_set (MonoClass *class) MONO_INTERNAL;
+
gpointer
mono_image_set_alloc (MonoImageSet *set, guint size) MONO_INTERNAL;
if (!tb->nesting_type) {
mono_image_add_to_name_cache (klass->image, klass->name_space, klass->name, tb->table_idx);
} else {
- klass->image->reflection_info_unregister_classes =
- g_slist_prepend (klass->image->reflection_info_unregister_classes, klass);
+ mono_image_append_class_to_reflection_info_set (klass);
}
} else {
g_assert (mono_class_get_ref_info (klass) == tb);
gparam->type.type = &pklass->byval_arg;
mono_class_set_ref_info (pklass, gparam);
- mono_image_lock (image);
- image->reflection_info_unregister_classes = g_slist_prepend (image->reflection_info_unregister_classes, pklass);
- mono_image_unlock (image);
+ mono_image_append_class_to_reflection_info_set (pklass);
}
MonoArray *