X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fdebugger-agent.c;h=b24853b0586836fc34b151e91751737d3fa3c283;hb=81bd8db9cf9449aa500910c9fc9003cd77ed5244;hp=8c4d16aa4f27b4a3fb88d33e64e4e858d048365e;hpb=45b8807844671f9ffef041bd83a7f489a913ae49;p=mono.git diff --git a/mono/mini/debugger-agent.c b/mono/mini/debugger-agent.c index 8c4d16aa4f2..b24853b0586 100644 --- a/mono/mini/debugger-agent.c +++ b/mono/mini/debugger-agent.c @@ -1123,7 +1123,7 @@ socket_transport_recv (void *buf, int len) static gint64 last_keepalive; gint64 msecs; - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; do { again: @@ -1149,7 +1149,7 @@ socket_transport_recv (void *buf, int len) } } while ((res > 0 && total < len) || (res == -1 && get_last_sock_error () == MONO_EINTR)); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; return total; } @@ -1173,9 +1173,9 @@ set_keepalive (void) static int socket_transport_accept (int socket_fd) { - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; conn_fd = accept (socket_fd, NULL, NULL); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; if (conn_fd == -1) { fprintf (stderr, "debugger-agent: Unable to listen on %d\n", socket_fd); @@ -1191,13 +1191,13 @@ socket_transport_send (void *data, int len) { int res; - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; do { res = send (conn_fd, data, len, 0); } while (res == -1 && get_last_sock_error () == MONO_EINTR); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; if (res != len) return FALSE; @@ -1316,9 +1316,9 @@ socket_transport_connect (const char *address) FD_ZERO (&readfds); FD_SET (sfd, &readfds); - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; res = select (sfd + 1, &readfds, NULL, NULL, &tv); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; if (res == 0) { fprintf (stderr, "debugger-agent: Timed out waiting to connect.\n"); @@ -1345,16 +1345,16 @@ socket_transport_connect (const char *address) if (sfd == -1) continue; - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; res = connect (sfd, &sockaddr.addr, sock_len); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; if (res != -1) break; /* Success */ - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; close (sfd); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; } if (rp == 0) { @@ -1385,9 +1385,9 @@ socket_transport_close1 (void) #else shutdown (conn_fd, SHUT_RD); shutdown (listen_fd, SHUT_RDWR); - MONO_PREPARE_BLOCKING; + MONO_ENTER_GC_SAFE; close (listen_fd); - MONO_FINISH_BLOCKING; + MONO_EXIT_GC_SAFE; #endif } @@ -2678,7 +2678,7 @@ notify_thread (gpointer key, gpointer value, gpointer user_data) DEBUG_PRINTF (1, "[%p] Interrupting %p...\n", (gpointer) (gsize) mono_native_thread_id_get (), (gpointer)tid); - /* This is _not_ equivalent to ves_icall_System_Threading_Thread_Abort () */ + /* This is _not_ equivalent to mono_thread_internal_abort () */ InterruptData interrupt_data = { 0 }; interrupt_data.tls = tls; @@ -6802,7 +6802,7 @@ invoke_method (void) /* * Take the loader lock to avoid race conditions with CMD_VM_ABORT_INVOKE: * - * It is possible that ves_icall_System_Threading_Thread_Abort () was called + * It is possible that mono_thread_internal_abort () was called * after the mono_runtime_invoke_checked() already returned, but it doesn't matter * because we reset the abort here. */ @@ -7114,7 +7114,7 @@ vm_commands (int command, int id, guint8 *p, guint8 *end, Buffer *buf) tls->abort_requested = TRUE; - ves_icall_System_Threading_Thread_Abort (THREAD_TO_INTERNAL (thread), NULL); + mono_thread_internal_abort (THREAD_TO_INTERNAL (thread)); mono_loader_unlock (); break; } @@ -8159,7 +8159,9 @@ type_commands_internal (int command, MonoClass *klass, MonoDomain *domain, guint vtable = mono_class_vtable (domain, f->parent); val = (guint8 *)g_malloc (mono_class_instance_size (mono_class_from_mono_type (f->type))); - mono_field_static_get_value_for_thread (thread ? thread : mono_thread_internal_current (), vtable, f, val); + mono_field_static_get_value_for_thread (thread ? thread : mono_thread_internal_current (), vtable, f, val, &error); + if (!is_ok (&error)) + return ERR_INVALID_FIELDID; buffer_add_value (buf, f->type, val, domain); g_free (val); } @@ -8664,11 +8666,12 @@ method_commands_internal (int command, MonoMethod *method, MonoDomain *domain, g // FIXME: Generics switch (mono_metadata_token_code (token)) { case MONO_TOKEN_STRING: { + MonoError error; MonoString *s; char *s2; - s = mono_ldstr (domain, method->klass->image, mono_metadata_token_index (token)); - g_assert (s); + s = mono_ldstr_checked (domain, method->klass->image, mono_metadata_token_index (token), &error); + mono_error_assert_ok (&error); /* FIXME don't swallow the error */ s2 = mono_string_to_utf8 (s); @@ -9324,7 +9327,11 @@ object_commands (int command, guint8 *p, guint8 *end, Buffer *buf) g_assert (f->type->attrs & FIELD_ATTRIBUTE_STATIC); vtable = mono_class_vtable (obj->vtable->domain, f->parent); val = (guint8 *)g_malloc (mono_class_instance_size (mono_class_from_mono_type (f->type))); - mono_field_static_get_value (vtable, f, val); + mono_field_static_get_value_checked (vtable, f, val, &error); + if (!is_ok (&error)) { + mono_error_cleanup (&error); /* FIXME report the error */ + return ERR_INVALID_OBJECT; + } buffer_add_value (buf, f->type, val, obj->vtable->domain); g_free (val); } else {