Merge pull request #5675 from mono/glib-debug-symbols
[mono.git] / mono / metadata / appdomain.c
index 7bcd8fa7a752ca25f81c4f58b7d898492a6e7961..e04b84a7253da2ddaad0d46069337cf8e7ddd81d 100644 (file)
@@ -636,7 +636,7 @@ mono_domain_create_appdomain_internal (char *friendly_name, MonoAppDomainSetupHa
        data->domain = MONO_HANDLE_RAW (ad);
        data->friendly_name = g_strdup (friendly_name);
 
-       mono_profiler_appdomain_name (data, data->friendly_name);
+       MONO_PROFILER_RAISE (domain_name, (data, data->friendly_name));
 
        MonoStringHandle app_base = MONO_HANDLE_NEW_GET (MonoString, setup, application_base);
        if (MONO_HANDLE_IS_NULL (app_base)) {
@@ -1174,8 +1174,21 @@ mono_try_assembly_resolve_handle (MonoDomain *domain, MonoStringHandle fname, Mo
        params [0] = MONO_HANDLE_RAW (fname);
        params[1] = requesting ? MONO_HANDLE_RAW (requesting_handle) : NULL;
        params [2] = &isrefonly;
-       MonoReflectionAssemblyHandle result = MONO_HANDLE_NEW (MonoReflectionAssembly, mono_runtime_invoke_checked (method, domain->domain, params, error));
+       MonoObject *exc = NULL;
+       MonoReflectionAssemblyHandle result = MONO_HANDLE_NEW (MonoReflectionAssembly, mono_runtime_try_invoke (method, domain->domain, params, &exc, error));
+       if (!is_ok (error) || exc != NULL) {
+               if (is_ok (error))
+                       mono_error_set_exception_instance (error, (MonoException*)exc);
+               goto leave;
+       }
        ret = !MONO_HANDLE_IS_NULL (result) ? MONO_HANDLE_GETVAL (result, assembly) : NULL;
+
+       if (ret && !refonly && ret->ref_only) {
+               /* .NET Framework throws System.IO.FileNotFoundException in this case */
+               mono_error_set_file_not_found (error, "AssemblyResolveEvent handlers cannot return Assemblies loaded for reflection only");
+               ret = NULL;
+               goto leave;
+       }
 leave:
        HANDLE_FUNCTION_RETURN_VAL (ret);
 }
@@ -2266,10 +2279,6 @@ ves_icall_System_AppDomain_InternalUnload (gint32 domain_id, MonoError *error)
        if (g_hasenv ("MONO_NO_UNLOAD"))
                return;
 
-#ifdef __native_client__
-       return;
-#endif
-
        MonoException *exc = NULL;
        mono_domain_try_unload (domain, (MonoObject**)&exc);
        if (exc)
@@ -2584,7 +2593,6 @@ unload_thread_main (void *arg)
 
        mono_loader_lock (); //FIXME why do we need the loader lock here?
        mono_domain_lock (domain);
-#ifdef HAVE_SGEN_GC
        /*
         * We need to make sure that we don't have any remsets
         * pointing into static data of the to-be-freed domain because
@@ -2597,7 +2605,6 @@ unload_thread_main (void *arg)
        for (i = 0; i < domain->class_vtable_array->len; ++i)
                zero_static_data ((MonoVTable *)g_ptr_array_index (domain->class_vtable_array, i));
        mono_gc_collect (0);
-#endif
        for (i = 0; i < domain->class_vtable_array->len; ++i)
                clear_cached_vtable ((MonoVTable *)g_ptr_array_index (domain->class_vtable_array, i));
        deregister_reflection_info_roots (domain);