Author: gonzalo
Date: 2005-04-29 18:58:25 -0400 (Fri, 29 Apr 2005)
New Revision: 43808
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/image.c
Log:
2005-04-29 Gonzalo Paniagua Javier <[EMAIL PROTECTED]>
* image.c: register assemblies loaded from data (bundles) in the loaded
assemblies hash. Fixes bug #74772.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2005-04-29 21:48:47 UTC (rev 43807)
+++ trunk/mono/mono/metadata/ChangeLog 2005-04-29 22:58:25 UTC (rev 43808)
@@ -1,3 +1,8 @@
+2005-04-29 Gonzalo Paniagua Javier <[EMAIL PROTECTED]>
+
+ * image.c: register assemblies loaded from data (bundles) in the loaded
+ assemblies hash. Fixes bug #74772.
+
2005-04-29 Martin Baulig <[EMAIL PROTECTED]>
* class.c (mono_type_get_name_recurse): Update to the new naming
Modified: trunk/mono/mono/metadata/image.c
===================================================================
--- trunk/mono/mono/metadata/image.c 2005-04-29 21:48:47 UTC (rev 43807)
+++ trunk/mono/mono/metadata/image.c 2005-04-29 22:58:25 UTC (rev 43808)
@@ -814,6 +814,30 @@
return res;
}
+static MonoImage *
+register_image (MonoImage *image)
+{
+ MonoImage *image2;
+
+ EnterCriticalSection (&images_mutex);
+ image2 = g_hash_table_lookup (loaded_images_hash, image->name);
+
+ if (image2) {
+ /* Somebody else beat us to it */
+ mono_image_addref (image2);
+ LeaveCriticalSection (&images_mutex);
+ mono_image_close (image);
+ return image2;
+ }
+ g_hash_table_insert (loaded_images_hash, image->name, image);
+ if (image->assembly_name && (g_hash_table_lookup (loaded_images_hash,
image->assembly_name) == NULL))
+ g_hash_table_insert (loaded_images_hash, (char *)
image->assembly_name, image);
+ g_hash_table_insert (loaded_images_guid_hash, image->guid, image);
+ LeaveCriticalSection (&images_mutex);
+
+ return image;
+}
+
MonoImage *
mono_image_open_from_data (char *data, guint32 data_len, gboolean need_copy,
MonoImageOpenStatus *status)
{
@@ -846,7 +870,11 @@
iinfo = g_new0 (MonoCLIImageInfo, 1);
image->image_info = iinfo;
- return do_mono_image_load (image, status, TRUE);
+ image = do_mono_image_load (image, status, TRUE);
+ if (image == NULL)
+ return NULL;
+
+ return register_image (image);
}
/**
@@ -860,7 +888,7 @@
MonoImage *
mono_image_open (const char *fname, MonoImageOpenStatus *status)
{
- MonoImage *image, *image2;
+ MonoImage *image;
char *absfname;
g_return_val_if_fail (fname != NULL, NULL);
@@ -888,23 +916,7 @@
if (image == NULL)
return NULL;
- EnterCriticalSection (&images_mutex);
- image2 = g_hash_table_lookup (loaded_images_hash, image->name);
-
- if (image2) {
- /* Somebody else beat us to it */
- mono_image_addref (image2);
- LeaveCriticalSection (&images_mutex);
- mono_image_close (image);
- return image2;
- }
- g_hash_table_insert (loaded_images_hash, image->name, image);
- if (image->assembly_name && (g_hash_table_lookup (loaded_images_hash,
image->assembly_name) == NULL))
- g_hash_table_insert (loaded_images_hash, (char *)
image->assembly_name, image);
- g_hash_table_insert (loaded_images_guid_hash, image->guid, image);
- LeaveCriticalSection (&images_mutex);
-
- return image;
+ return register_image (image);
}
/**
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches