X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fattach.c;h=942209fb168b1136dcdca933376ab5d35c16ff25;hb=HEAD;hp=13f03abf48535462f6b94fb5f912c6ab3d16183c;hpb=5c62590ba739d5960019890fe458e9b326b51993;p=mono.git diff --git a/mono/metadata/attach.c b/mono/metadata/attach.c index 13f03abf485..942209fb168 100644 --- a/mono/metadata/attach.c +++ b/mono/metadata/attach.c @@ -1,5 +1,6 @@ -/* - * attach.c: Support for attaching to the runtime from other processes. +/** + * \file + * Support for attaching to the runtime from other processes. * * Author: * Zoltan Varga (vargaz@gmail.com) @@ -24,8 +25,6 @@ #include #include #include -#include -#include #include #include #include @@ -33,7 +32,7 @@ #include #include -#include +#include #include #include #include @@ -277,7 +276,7 @@ mono_attach_load_agent (MonoDomain *domain, char *agent, char *args, MonoObject gpointer pa [1]; MonoImageOpenStatus open_status; - agent_assembly = mono_assembly_open (agent, &open_status); + agent_assembly = mono_assembly_open_predicate (agent, FALSE, FALSE, NULL, NULL, &open_status); if (!agent_assembly) { fprintf (stderr, "Cannot open agent assembly '%s': %s.\n", agent, mono_image_strerror (open_status)); g_free (agent); @@ -314,7 +313,14 @@ mono_attach_load_agent (MonoDomain *domain, char *agent, char *args, MonoObject } if (args) { - mono_array_set (main_args, MonoString*, 0, mono_string_new (domain, args)); + MonoString *args_str = mono_string_new_checked (domain, args, &error); + if (!is_ok (&error)) { + g_print ("Could not allocate main method arg string due to %s\n", mono_error_get_message (&error)); + mono_error_cleanup (&error); + g_free (agent); + return 1; + } + mono_array_set (main_args, MonoString*, 0, args_str); } @@ -477,12 +483,18 @@ transport_send (int fd, guint8 *data, int len) static void transport_start_receive (void) { + MonoError error; + MonoInternalThread *internal; + transport_connect (); if (!listen_fd) return; - receiver_thread_handle = mono_threads_create_thread (receiver_thread, NULL, NULL, NULL); + internal = mono_thread_create_internal (mono_get_root_domain (), receiver_thread, NULL, MONO_THREAD_CREATE_FLAGS_NONE, &error); + mono_error_assert_ok (&error); + + receiver_thread_handle = mono_threads_open_thread_handle (internal->handle); g_assert (receiver_thread_handle); } @@ -494,8 +506,17 @@ receiver_thread (void *arg) guint8 buffer [256]; guint8 *p, *p_end; MonoObject *exc; - - mono_native_thread_set_name (mono_native_thread_id_get (), "Attach receiver"); + MonoInternalThread *internal; + + internal = mono_thread_internal_current (); + MonoString *attach_str = mono_string_new_checked (mono_domain_get (), "Attach receiver", &error); + mono_error_assert_ok (&error); + mono_thread_set_name_internal (internal, attach_str, TRUE, FALSE, &error); + mono_error_assert_ok (&error); + /* Ask the runtime to not abort this thread */ + //internal->flags |= MONO_THREAD_FLAG_DONT_MANAGE; + /* Ask the runtime to not wait for this thread */ + internal->state |= ThreadState_Background; printf ("attach: Listening on '%s'...\n", server_uri); @@ -507,14 +528,6 @@ receiver_thread (void *arg) printf ("attach: Connected.\n"); - MonoThread *thread = mono_thread_attach (mono_get_root_domain ()); - mono_thread_set_name_internal (thread->internal_thread, mono_string_new (mono_get_root_domain (), "Attach receiver"), TRUE, &error); - mono_error_assert_ok (&error); - /* Ask the runtime to not abort this thread */ - //mono_thread_current ()->flags |= MONO_THREAD_FLAG_DONT_MANAGE; - /* Ask the runtime to not wait for this thread */ - thread->internal_thread->state |= ThreadState_Background; - while (TRUE) { char *cmd, *agent_name, *agent_args; guint8 *body;