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

Reply via email to