[runtime] MonoError-ize mono_field_static_get_value_for_thread
authorAleksey Kliger <aleksey@xamarin.com>
Thu, 21 Apr 2016 15:59:56 +0000 (11:59 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Mon, 9 May 2016 15:04:43 +0000 (11:04 -0400)
mono/metadata/object-internals.h
mono/metadata/object.c
mono/mini/debugger-agent.c

index 70a6f609e062f6ecf2cf2fc044ae6ea9d80a81f3..591f6376f82f9208b83a41d56cc9ac26b5f304d1 100644 (file)
@@ -1604,7 +1604,7 @@ MonoObject *
 mono_object_new_alloc_specific_checked (MonoVTable *vtable, MonoError *error);
 
 void
-mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value);
+mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value, MonoError *error);
 
 /* exported, used by the debugger */
 MONO_API void *
index 4daa85939035c845e2c96a6e7e5db84e2a0e3300..f315f7611aa0d7937955982aab3ca6ef9b894ef1 100644 (file)
@@ -3588,18 +3588,18 @@ get_default_field_value (MonoDomain* domain, MonoClassField *field, void *value,
 }
 
 void
-mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value)
+mono_field_static_get_value_for_thread (MonoInternalThread *thread, MonoVTable *vt, MonoClassField *field, void *value, MonoError *error)
 {
        MONO_REQ_GC_UNSAFE_MODE;
 
-       MonoError error;
        void *src;
 
+       mono_error_init (error);
+
        g_return_if_fail (field->type->attrs & FIELD_ATTRIBUTE_STATIC);
        
        if (field->type->attrs & FIELD_ATTRIBUTE_LITERAL) {
-               get_default_field_value (vt->domain, field, value, &error);
-               mono_error_raise_exception (&error); /* FIXME don't raise here */
+               get_default_field_value (vt->domain, field, value, error);
                return;
        }
 
@@ -3634,7 +3634,10 @@ mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value)
 {
        MONO_REQ_GC_NEUTRAL_MODE;
 
-       mono_field_static_get_value_for_thread (mono_thread_internal_current (), vt, field, value);
+       MonoError error;
+
+       mono_field_static_get_value_for_thread (mono_thread_internal_current (), vt, field, value, &error);
+       mono_error_raise_exception (&error); /* FIXME don't raise here */
 }
 
 /**
index 8c4d16aa4f27b4a3fb88d33e64e4e858d048365e..66509454368abac080e0af66e31560affccf122d 100644 (file)
@@ -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);
                }