Replace mono_assembly_name_free use with mono_assembly_name_free_internal. (mono...
authorJay Krell <jaykrell@microsoft.com>
Wed, 16 Oct 2019 12:25:55 +0000 (05:25 -0700)
committermonojenkins <jo.shields+jenkins@xamarin.com>
Wed, 16 Oct 2019 12:25:55 +0000 (14:25 +0200)
Replace mono_assembly_name_free use with mono_assembly_name_free_internal.

Maybe just remove the GC mode change and remove the internal form.
We don't really equate malloc/free with GC/locks/hangs, though arguably we should. Arguably this change is right.

Commit migrated from https://github.com/mono/mono/commit/a03027cab08e9b2caddef8cdd8b62b8d2d6430c8

src/mono/mono/metadata/appdomain.c
src/mono/mono/metadata/assembly.c
src/mono/mono/metadata/assembly.h
src/mono/mono/metadata/external-only.c
src/mono/mono/metadata/icall.c
src/mono/mono/mini/mini-wasm-debugger.c

index c5ec278..63b86b4 100644 (file)
@@ -2790,7 +2790,7 @@ ves_icall_System_AppDomain_LoadAssembly (MonoAppDomainHandle ad, MonoStringHandl
        req.basedir = basedir;
        req.no_postload_search = TRUE;
        ass = mono_assembly_request_byname (&aname, &req, &status);
-       mono_assembly_name_free (&aname);
+       mono_assembly_name_free_internal (&aname);
 
        if (!ass) {
                /* MS.NET doesn't seem to call the assembly resolve handler for refonly assemblies */
index fc76569..0f76295 100644 (file)
@@ -2863,7 +2863,7 @@ mono_assembly_binding_applies_to_image (MonoAssemblyLoadContext *alc, MonoImage*
                        *status = new_status;
                }
        }
-       mono_assembly_name_free (&probed_aname);
+       mono_assembly_name_free_internal (&probed_aname);
        return result_ass;
 }
 
@@ -2922,7 +2922,7 @@ mono_problematic_image_reprobe (MonoAssemblyLoadContext *alc, MonoImage *image,
        if (! (result_ass && new_status == MONO_IMAGE_OK)) {
                *status = new_status;
        }
-       mono_assembly_name_free (&probed_aname);
+       mono_assembly_name_free_internal (&probed_aname);
        return result_ass;
 }
 /**
@@ -3188,21 +3188,13 @@ mono_assembly_load_from (MonoImage *image, const char *fname,
 }
 
 /**
- * mono_assembly_name_free:
+ * mono_assembly_name_free_internal:
  * \param aname assembly name to free
  * 
  * Frees the provided assembly name object.
  * (it does not frees the object itself, only the name members).
  */
 void
-mono_assembly_name_free (MonoAssemblyName *aname)
-{
-       MONO_ENTER_GC_UNSAFE;
-       mono_assembly_name_free_internal (aname);
-       MONO_EXIT_GC_UNSAFE;
-}
-
-void
 mono_assembly_name_free_internal (MonoAssemblyName *aname)
 {
        MONO_REQ_GC_UNSAFE_MODE;
@@ -3384,7 +3376,7 @@ build_assembly_name (const char *name, const char *version, const char *culture,
 
                /* the constant includes the ending NULL, hence the -1 */
                if (strlen (token) != (MONO_PUBLIC_KEY_TOKEN_LENGTH - 1)) {
-                       mono_assembly_name_free (aname);
+                       mono_assembly_name_free_internal (aname);
                        return FALSE;
                }
                lower = g_ascii_strdown (token, MONO_PUBLIC_KEY_TOKEN_LENGTH);
@@ -3396,7 +3388,7 @@ build_assembly_name (const char *name, const char *version, const char *culture,
                gboolean is_ecma = FALSE;
                gchar *pkey = NULL;
                if (strcmp (key, "null") == 0 || !parse_public_key (key, &pkey, &is_ecma)) {
-                       mono_assembly_name_free (aname);
+                       mono_assembly_name_free_internal (aname);
                        return FALSE;
                }
 
@@ -3817,7 +3809,7 @@ probe_for_partial_name (const char *basepath, const char *fullname, MonoAssembly
                        fullpath = g_build_path (G_DIR_SEPARATOR_S, basepath, direntry, fullname, (const char*)NULL);
                }
 
-               mono_assembly_name_free (&gac_aname);
+               mono_assembly_name_free_internal (&gac_aname);
        }
        
        g_dir_close (dirhandle);
@@ -3890,14 +3882,14 @@ mono_assembly_load_with_partial_name_internal (const char *name, MonoAssemblyLoa
        
        res = mono_assembly_loaded_internal (alc, aname, FALSE);
        if (res) {
-               mono_assembly_name_free (aname);
+               mono_assembly_name_free_internal (aname);
                return res;
        }
 
        res = invoke_assembly_preload_hook (alc, aname, assemblies_path);
        if (res) {
                res->in_gac = FALSE;
-               mono_assembly_name_free (aname);
+               mono_assembly_name_free_internal (aname);
                return res;
        }
 
@@ -3919,7 +3911,7 @@ mono_assembly_load_with_partial_name_internal (const char *name, MonoAssemblyLoa
        if (res) {
                res->in_gac = TRUE;
                g_free (fullname);
-               mono_assembly_name_free (aname);
+               mono_assembly_name_free_internal (aname);
                return res;
        }
 
@@ -3932,7 +3924,7 @@ mono_assembly_load_with_partial_name_internal (const char *name, MonoAssemblyLoa
                res->in_gac = TRUE;
 #endif
 
-       mono_assembly_name_free (aname);
+       mono_assembly_name_free_internal (aname);
 
        if (!res) {
                res = mono_try_assembly_resolve (alc, name, NULL, FALSE, error);
@@ -4469,7 +4461,7 @@ mono_assembly_load_corlib (const MonoRuntimeInfo *runtime, MonoImageOpenStatus *
        // A nonstandard preload hook may provide a special mscorlib assembly
        aname = mono_assembly_name_new ("mscorlib.dll");
        corlib = invoke_assembly_preload_hook (req.request.alc, aname, assemblies_path);
-       mono_assembly_name_free (aname);
+       mono_assembly_name_free_internal (aname);
        g_free (aname);
        if (corlib != NULL)
                goto return_corlib_and_facades;
@@ -4914,7 +4906,7 @@ mono_assembly_close_except_image_pools (MonoAssembly *assembly)
 
        for (tmp = assembly->friend_assembly_names; tmp; tmp = tmp->next) {
                MonoAssemblyName *fname = (MonoAssemblyName *)tmp->data;
-               mono_assembly_name_free (fname);
+               mono_assembly_name_free_internal (fname);
                g_free (fname);
        }
        g_slist_free (assembly->friend_assembly_names);
index 272e4fc..b5b3127 100644 (file)
@@ -113,7 +113,7 @@ MONO_API const char*       mono_assembly_name_get_culture     (MonoAssemblyName
 MONO_API uint16_t          mono_assembly_name_get_version     (MonoAssemblyName *aname,
                                                      uint16_t *minor, uint16_t *build, uint16_t *revision);
 MONO_API mono_byte*        mono_assembly_name_get_pubkeytoken (MonoAssemblyName *aname);
-MONO_API void              mono_assembly_name_free            (MonoAssemblyName *aname);
+MONO_API MONO_RT_EXTERNAL_ONLY void mono_assembly_name_free   (MonoAssemblyName *aname);
 
 typedef struct {
        const char *name;
index 6cfe94d..370fb3c 100644 (file)
@@ -19,6 +19,7 @@
 #include "class-init.h"
 #include "marshal.h"
 #include "object.h"
+#include "assembly-internals.h"
 #include "external-only.h"
 
 /**
@@ -323,3 +324,18 @@ mono_domain_set (MonoDomain *domain, gboolean force)
        MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_domain_set_internal_with_options (domain, TRUE));
        return TRUE;
 }
+
+/**
+ * mono_assembly_name_free:
+ * \param aname assembly name to free
+ *
+ * Frees the provided assembly name object.
+ * (it does not frees the object itself, only the name members).
+ */
+void
+mono_assembly_name_free (MonoAssemblyName *aname)
+{
+       if (!aname)
+               return;
+       MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_assembly_name_free_internal (aname));
+}
index 576e668..b5acdb6 100644 (file)
@@ -6264,7 +6264,7 @@ ves_icall_System_Reflection_RuntimeAssembly_GetTopLevelForwardedTypes (MonoRefle
 void
 ves_icall_Mono_RuntimeMarshal_FreeAssemblyName (MonoAssemblyName *aname, MonoBoolean free_struct, MonoError *error)
 {
-       mono_assembly_name_free (aname);
+       mono_assembly_name_free_internal (aname);
        if (free_struct)
                g_free (aname);
 }
index fd34e21..42554d2 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <emscripten.h>
 
+#include "mono/metadata/assembly-internals.h"
 
 static int log_level = 1;
 
@@ -413,7 +414,7 @@ mono_wasm_set_breakpoint (const char *assembly_name, int method_token, int il_of
                return -1;
        }
 
-       mono_assembly_name_free (aname);
+       mono_assembly_name_free_internal (aname);
 
        MonoMethod *method = mono_get_method_checked (assembly->image, MONO_TOKEN_METHOD_DEF | method_token, NULL, NULL, error);
        if (!method) {