[io-layer] Extract socket (#4241)
[mono.git] / mono / metadata / appdomain.c
index d877782ae864be9488e9d8984b368ad5365eedbc..74323ab37b36e9a6fc94a85a049c4c2910d3ce3e 100644 (file)
@@ -42,8 +42,7 @@
 #include <mono/metadata/exception.h>
 #include <mono/metadata/exception-internals.h>
 #include <mono/metadata/threads.h>
-#include <mono/metadata/threadpool-ms.h>
-#include <mono/metadata/socket-io.h>
+#include <mono/metadata/threadpool.h>
 #include <mono/metadata/tabledefs.h>
 #include <mono/metadata/gc-internals.h>
 #include <mono/metadata/mono-gc.h>
@@ -60,6 +59,7 @@
 #include <mono/metadata/profiler-private.h>
 #include <mono/metadata/reflection-internals.h>
 #include <mono/metadata/abi-details.h>
+#include <mono/metadata/w32socket.h>
 #include <mono/utils/mono-uri.h>
 #include <mono/utils/mono-logger-internals.h>
 #include <mono/utils/mono-path.h>
@@ -70,6 +70,7 @@
 #include <mono/utils/mono-memory-model.h>
 #include <mono/utils/mono-threads.h>
 #include <mono/metadata/w32handle.h>
+#include <mono/io-layer/io-layer.h>
 #ifdef HOST_WIN32
 #include <direct.h>
 #endif
@@ -1814,6 +1815,11 @@ mono_domain_from_appdomain (MonoAppDomain *appdomain)
 {
        if (appdomain == NULL)
                return NULL;
+
+       if (mono_object_is_transparent_proxy (&appdomain->mbr.obj)) {
+               MonoTransparentProxy *tp = (MonoTransparentProxy*)appdomain;
+               return mono_domain_get_by_id (tp->rp->target_domain_id);
+       }
        
        return appdomain->data;
 }
@@ -2157,29 +2163,31 @@ ves_icall_System_AppDomain_DoUnhandledException (MonoException *exc)
 }
 
 gint32
-ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad, 
-                                                                                       MonoReflectionAssembly *refass, MonoArray *args)
+ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomainHandle ad,
+                                           MonoReflectionAssemblyHandle refass, MonoArrayHandle args,
+                                           MonoError *error)
 {
-       MonoError error;
+       mono_error_init (error);
        MonoImage *image;
        MonoMethod *method;
 
-       g_assert (refass);
-       image = refass->assembly->image;
+       g_assert (!MONO_HANDLE_IS_NULL (refass));
+       MonoAssembly *assembly = MONO_HANDLE_GETVAL (refass, assembly);
+       image = assembly->image;
        g_assert (image);
 
-       method = mono_get_method_checked (image, mono_image_get_entry_point (image), NULL, NULL, &error);
+       method = mono_get_method_checked (image, mono_image_get_entry_point (image), NULL, NULL, error);
 
        if (!method)
-               g_error ("No entry point method found in %s due to %s", image->name, mono_error_get_message (&error));
+               g_error ("No entry point method found in %s due to %s", image->name, mono_error_get_message (error));
 
-       if (!args) {
-               args = (MonoArray *) mono_array_new_checked (ad->data, mono_defaults.string_class, 0, &error);
-               mono_error_assert_ok (&error);
+       if (MONO_HANDLE_IS_NULL (args)) {
+               MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data);
+               MONO_HANDLE_ASSIGN (args , mono_array_new_handle (domain, mono_defaults.string_class, 0, error));
+               mono_error_assert_ok (error);
        }
 
-       int res = mono_runtime_exec_main_checked (method, (MonoArray *)args, &error);
-       mono_error_set_pending_exception (&error);
+       int res = mono_runtime_exec_main_checked (method, MONO_HANDLE_RAW (args), error);
        return res;
 }
 
@@ -2415,7 +2423,7 @@ unload_thread_main (void *arg)
                goto failure;
        }
 
-       if (!mono_threadpool_ms_remove_domain_jobs (domain, -1)) {
+       if (!mono_threadpool_remove_domain_jobs (domain, -1)) {
                data->failure_reason = g_strdup_printf ("Cleanup of threadpool jobs of domain %s timed out.", domain->friendly_name);
                goto failure;
        }