#include <mono/metadata/threadpool.h>
#include <mono/metadata/tabledefs.h>
#include <mono/metadata/mono-gc.h>
+#include <mono/metadata/mono-hash-internals.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/marshal-internals.h>
#include <mono/metadata/monitor.h>
MonoAppDomainSetupHandle copy = MONO_HANDLE_CAST (MonoAppDomainSetup, mono_object_new_handle(domain, ads_class, error));
goto_if_nok (error, leave);
- mono_domain_set_internal (domain);
+ mono_domain_set_internal_with_options (domain, TRUE);
#define XCOPY_FIELD(type, dst, field, src, error) \
do { \
#undef XCOPY_FIELD
#undef COPY_VAL
- mono_domain_set_internal (caller_domain);
+ mono_domain_set_internal_with_options (caller_domain, TRUE);
MONO_HANDLE_ASSIGN (result, copy);
leave:
return res;
}
-/**
- * mono_domain_set:
- * \param domain domain
- * \param force force setting.
- *
- * Set the current appdomain to \p domain. If \p force is set, set it even
- * if it is being unloaded.
- *
- * \returns TRUE on success; FALSE if the domain is unloaded
- */
gboolean
-mono_domain_set (MonoDomain *domain, gboolean force)
+mono_domain_set_fast (MonoDomain *domain, gboolean force)
{
+ MONO_REQ_GC_UNSAFE_MODE;
if (!force && domain->state == MONO_APPDOMAIN_UNLOADED)
return FALSE;
- MONO_ENTER_GC_UNSAFE;
- mono_domain_set_internal (domain);
- MONO_EXIT_GC_UNSAFE;
+ mono_domain_set_internal_with_options (domain, TRUE);
return TRUE;
}
mono_domain_lock (add);
- mono_g_hash_table_insert (add->env, MONO_HANDLE_RAW (name), MONO_HANDLE_RAW (data));
+ mono_g_hash_table_insert_internal (add->env, MONO_HANDLE_RAW (name), MONO_HANDLE_RAW (data));
mono_domain_unlock (add);
}
error_init (error);
MonoDomain *old_domain = mono_domain_get ();
- if (!mono_domain_set (MONO_HANDLE_GETVAL (ad, data), FALSE)) {
+ if (!mono_domain_set_fast (MONO_HANDLE_GETVAL (ad, data), FALSE)) {
mono_error_set_appdomain_unloaded (error);
return MONO_HANDLE_CAST (MonoAppDomain, NULL_HANDLE);
}
MonoDomain *current_domain = mono_domain_get ();
MonoDomain *domain = mono_domain_get_by_id (domainid);
- if (!domain || !mono_domain_set (domain, FALSE)) {
+ if (!domain || !mono_domain_set_fast (domain, FALSE)) {
mono_error_set_appdomain_unloaded (error);
return MONO_HANDLE_CAST (MonoAppDomain, NULL_HANDLE);
}
}
}
- mono_domain_set (domain, FALSE);
+ mono_domain_set_fast (domain, FALSE);
/* Notify OnDomainUnload listeners */
method = mono_class_get_method_from_name_checked (domain->domain->mbr.obj.vtable->klass, "DoDomainUnload", -1, 0, error);
g_assert (method);
if (*exc) {
/* Roll back the state change */
domain->state = MONO_APPDOMAIN_CREATED;
- mono_domain_set (caller_domain, FALSE);
+ mono_domain_set_fast (caller_domain, FALSE);
goto exit;
}
- mono_domain_set (caller_domain, FALSE);
+ mono_domain_set_fast (caller_domain, FALSE);
thread_data = g_new0 (unload_data, 1);
thread_data->domain = domain;
MONO_API const char *
mono_domain_get_friendly_name (MonoDomain *domain);
-MONO_API mono_bool
+MONO_API MONO_RT_EXTERNAL_ONLY mono_bool
mono_domain_set (MonoDomain *domain, mono_bool force);
-MONO_API void
+MONO_API MONO_RT_EXTERNAL_ONLY void
mono_domain_set_internal (MonoDomain *domain);
MONO_API MONO_RT_EXTERNAL_ONLY void
#include <mono/metadata/mono-debug.h>
#include <mono/utils/mono-uri.h>
#include <mono/metadata/mono-config.h>
+#include <mono/metadata/mono-config-internals.h>
#include <mono/metadata/mono-config-dirs.h>
#include <mono/utils/mono-digest.h>
#include <mono/utils/mono-logger-internals.h>
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY,
"Assembly Loader loaded assembly from location: '%s'.", filename);
if (!refonly)
- mono_config_for_assembly (ass->image);
+ mono_config_for_assembly_internal (ass->image);
}
/* Clear the reference added by mono_image_open */
const char*
mono_class_get_field_default_value (MonoClassField *field, MonoTypeEnum *def_type);
+MonoProperty*
+mono_class_get_property_from_name_internal (MonoClass *klass, const char *name);
+
const char*
mono_class_get_property_default_value (MonoProperty *property, MonoTypeEnum *def_type);
gboolean
mono_class_is_variant_compatible (MonoClass *klass, MonoClass *oklass, gboolean check_for_reference_conv);
+gboolean
+mono_class_is_subclass_of_internal (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces);
+
mono_bool
mono_class_is_assignable_from_internal (MonoClass *klass, MonoClass *oklass);
static char* mono_assembly_name_from_token (MonoImage *image, guint32 type_token);
static guint32 mono_field_resolve_flags (MonoClassField *field);
-static MonoProperty* mono_class_get_property_from_name_internal (MonoClass *klass, const char *name);
-
-static gboolean mono_class_is_subclass_of_internal (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces);
-
GENERATE_GET_CLASS_WITH_CACHE (valuetype, "System", "ValueType")
GENERATE_TRY_GET_CLASS_WITH_CACHE (handleref, "System.Runtime.InteropServices", "HandleRef")
return 0;
}
-/**
- * mono_class_get_property_from_name:
- * \param klass a class
- * \param name name of the property to lookup in the specified class
- *
- * Use this method to lookup a property in a class
- * \returns the \c MonoProperty with the given name, or NULL if the property
- * does not exist on the \p klass.
- */
-MonoProperty*
-mono_class_get_property_from_name (MonoClass *klass, const char *name)
-{
- MonoProperty *result = NULL;
- MONO_ENTER_GC_UNSAFE;
- result = mono_class_get_property_from_name_internal (klass, name);
- MONO_EXIT_GC_UNSAFE;
- return result;
-}
-
MonoProperty*
mono_class_get_property_from_name_internal (MonoClass *klass, const char *name)
{
return klass;
}
-
-/**
- * mono_class_is_subclass_of:
- * \param klass class to probe if it is a subclass of another one
- * \param klassc the class we suspect is the base class
- * \param check_interfaces whether we should perform interface checks
- *
- * This method determines whether \p klass is a subclass of \p klassc.
- *
- * If the \p check_interfaces flag is set, then if \p klassc is an interface
- * this method return TRUE if the \p klass implements the interface or
- * if \p klass is an interface, if one of its base classes is \p klass.
- *
- * If \p check_interfaces is false, then if \p klass is not an interface,
- * it returns TRUE if the \p klass is a subclass of \p klassc.
- *
- * if \p klass is an interface and \p klassc is \c System.Object, then this function
- * returns TRUE.
- *
- */
-gboolean
-mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc,
- gboolean check_interfaces)
-{
- gboolean result;
- MONO_ENTER_GC_UNSAFE;
- result = mono_class_is_subclass_of_internal (klass, klassc, check_interfaces);
- MONO_EXIT_GC_UNSAFE;
- return result;
-}
-
static gboolean
mono_interface_implements_interface (MonoClass *interface_implementer, MonoClass *interface_implemented)
{
mono_class_is_subclass_of_internal (MonoClass *klass, MonoClass *klassc,
gboolean check_interfaces)
{
+ MONO_REQ_GC_UNSAFE_MODE;
/* FIXME test for interfaces with variant generic arguments */
mono_class_init_internal (klass);
mono_class_init_internal (klassc);
MONO_API uint32_t
mono_class_get_event_token (MonoEvent *event);
-MONO_API MonoProperty*
+MONO_API MONO_RT_EXTERNAL_ONLY MonoProperty *
mono_class_get_property_from_name (MonoClass *klass, const char *name);
MONO_API uint32_t
MONO_API MONO_RT_EXTERNAL_ONLY MonoClass *
mono_class_from_mono_type (MonoType *type);
-MONO_API mono_bool
+MONO_API MONO_RT_EXTERNAL_ONLY mono_bool
mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc,
mono_bool check_interfaces);
#include "metadata/appdomain.h"
#include "metadata/reflection-internals.h"
#include "mono/metadata/class-init.h"
+#include "mono/metadata/class-internals.h"
#include "mono/metadata/debug-helpers.h"
#include "mono/metadata/threads.h"
#include "mono/metadata/monitor.h"
static MonoProperty* iunknown = NULL;
if (!iunknown)
- iunknown = mono_class_get_property_from_name (mono_class_get_com_object_class (), "IUnknown");
+ iunknown = mono_class_get_property_from_name_internal (mono_class_get_com_object_class (), "IUnknown");
mono_mb_emit_managed_call (mb, iunknown->get, NULL);
}
else if (conv == MONO_MARSHAL_CONV_OBJECT_IDISPATCH) {
static MonoProperty* idispatch = NULL;
if (!idispatch)
- idispatch = mono_class_get_property_from_name (mono_class_get_com_object_class (), "IDispatch");
+ idispatch = mono_class_get_property_from_name_internal (mono_class_get_com_object_class (), "IDispatch");
mono_mb_emit_managed_call (mb, idispatch->get, NULL);
}
else {
#include <config.h>
#include "mono/metadata/assembly.h"
#include "mono/metadata/class-init.h"
+#include "mono/metadata/class-internals.h"
#include "mono/metadata/gc-internals.h"
#include "mono/metadata/mono-endian.h"
#include "mono/metadata/object-internals.h"
mono_field_set_value_internal (MONO_HANDLE_RAW (attr), field, val); // FIXMEcoop
} else if (named_type == CATTR_TYPE_PROPERTY) {
MonoProperty *prop;
- prop = mono_class_get_property_from_name (mono_handle_class (attr), name);
+ prop = mono_class_get_property_from_name_internal (mono_handle_class (attr), name);
if (!prop) {
mono_error_set_generic_error (error, "System.Reflection", "CustomAttributeFormatException", "Could not find a property with name %s", name);
goto fail;
/* Named arg is a property */
MonoObject *obj;
MonoType *prop_type;
- MonoProperty *prop = mono_class_get_property_from_name (attrklass, name);
+ MonoProperty *prop = mono_class_get_property_from_name_internal (attrklass, name);
if (!prop || !prop->set) {
g_free (name);
} else if (named_type == CATTR_TYPE_PROPERTY) {
/* Named arg is a property */
MonoType *prop_type;
- MonoProperty *prop = mono_class_get_property_from_name (attrklass, name);
+ MonoProperty *prop = mono_class_get_property_from_name_internal (attrklass, name);
if (!prop || !prop->set) {
g_free (name);
void
mono_runtime_install_appctx_properties (void);
+gboolean
+mono_domain_set_fast (MonoDomain *domain, gboolean force);
+
#endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */
#include <mono/metadata/metadata-internals.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/mono-config.h>
+#include <mono/metadata/mono-hash-internals.h>
#include <mono/metadata/threads-types.h>
#include <mono/metadata/runtime.h>
#include <mono/metadata/w32mutex.h>
domain->mp = mono_mempool_new ();
domain->code_mp = mono_code_manager_new ();
domain->lock_free_mp = lock_free_mempool_new ();
- domain->env = mono_g_hash_table_new_type ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Environment Variable Table");
+ domain->env = mono_g_hash_table_new_type_internal ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Environment Variable Table");
domain->domain_assemblies = NULL;
domain->assembly_bindings = NULL;
domain->assembly_bindings_parsed = FALSE;
domain->class_vtable_array = g_ptr_array_new ();
domain->proxy_vtable_hash = g_hash_table_new ((GHashFunc)mono_ptrarray_hash, (GCompareFunc)mono_ptrarray_equal);
mono_jit_code_hash_init (&domain->jit_code_hash);
- domain->ldstr_table = mono_g_hash_table_new_type ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain String Pool Table");
+ domain->ldstr_table = mono_g_hash_table_new_type_internal ((GHashFunc)mono_string_hash_internal, (GCompareFunc)mono_string_equal_internal, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain String Pool Table");
domain->num_jit_info_table_duplicates = 0;
domain->jit_info_table = mono_jit_info_table_new (domain);
domain->jit_info_free_queue = NULL;
}
/**
- * mono_domain_set_internal:
- * \param domain the new domain
- *
- * Sets the current domain to \p domain.
- */
-void
-mono_domain_set_internal (MonoDomain *domain)
-{
- mono_domain_set_internal_with_options (domain, TRUE);
-}
-
-/**
* mono_domain_foreach:
* \param func function to invoke with the domain data
* \param user_data user-defined pointer that is passed to the supplied \p func fo reach domain
if (domain != mono_domain_get ()) {
current = mono_domain_get ();
- mono_domain_set (domain, FALSE);
+ mono_domain_set_fast (domain, FALSE);
ass = mono_assembly_request_open (name, &req, NULL);
- mono_domain_set (current, FALSE);
+ mono_domain_set_fast (current, FALSE);
} else {
ass = mono_assembly_request_open (name, &req, NULL);
}
#include "mono/metadata/dynamic-stream-internals.h"
#include "mono/metadata/gc-internals.h"
#include "mono/metadata/metadata-internals.h"
+#include "mono/metadata/mono-hash-internals.h"
#include "mono/metadata/profiler-private.h"
#include "mono/metadata/reflection-internals.h"
#include "mono/metadata/sre-internals.h"
g_assert_not_reached ();
}
}
- mono_g_hash_table_insert (assembly->tokens, GUINT_TO_POINTER (token), MONO_HANDLE_RAW (obj));
+ mono_g_hash_table_insert_internal (assembly->tokens, GUINT_TO_POINTER (token), MONO_HANDLE_RAW (obj));
dynamic_image_unlock (assembly);
}
#else
mono_image_init (&image->image);
- image->token_fixups = mono_g_hash_table_new_type ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Fixup Table");
+ image->token_fixups = mono_g_hash_table_new_type_internal ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Fixup Table");
image->method_to_table_idx = g_hash_table_new (NULL, NULL);
image->field_to_table_idx = g_hash_table_new (NULL, NULL);
image->method_aux_hash = g_hash_table_new (NULL, NULL);
image->vararg_aux_hash = g_hash_table_new (NULL, NULL);
image->handleref = g_hash_table_new (NULL, NULL);
- image->tokens = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Table");
- image->generic_def_objects = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Generic Definition Table");
+ image->tokens = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Token Table");
+ image->generic_def_objects = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Generic Definition Table");
image->typespec = g_hash_table_new ((GHashFunc)mono_metadata_type_hash, (GCompareFunc)mono_metadata_type_equal);
image->typeref = g_hash_table_new ((GHashFunc)mono_metadata_type_hash, (GCompareFunc)mono_metadata_type_equal);
image->blob_cache = g_hash_table_new ((GHashFunc)mono_blob_entry_hash, (GCompareFunc)mono_blob_entry_equal);
image->gen_params = g_ptr_array_new ();
- image->remapped_tokens = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Remapped Token Table");
+ image->remapped_tokens = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_REFLECTION, NULL, "Reflection Dynamic Image Remapped Token Table");
/*g_print ("string heap create for image %p (%s)\n", image, module_name);*/
string_heap_init (&image->sheap);
#include <mono/metadata/object-internals.h>
#include <mono/metadata/metadata-internals.h>
#include <mono/metadata/appdomain.h>
+#include <mono/metadata/domain-internals.h>
#include <mono/metadata/mono-debug.h>
#include <mono/utils/mono-error-internals.h>
#include <mono/utils/mono-logger-internals.h>
goto_if_nok (error, return_null);
if (domain != caller_domain)
- mono_domain_set_internal (domain);
+ mono_domain_set_internal_with_options (domain, TRUE);
mono_runtime_object_init_handle (o, error);
mono_error_assert_ok (error);
// Restore domain in success and error path.
if (domain != caller_domain)
- mono_domain_set_internal (caller_domain);
+ mono_domain_set_internal_with_options (caller_domain, TRUE);
goto_if_ok (error, exit);
return_null:
#include "config.h"
#include "class-internals.h"
+#include "domain-internals.h"
+#include "mono-hash-internals.h"
+#include "mono-config-internals.h"
#include "object-internals.h"
#include "class-init.h"
#include "marshal.h"
{
MONO_EXTERNAL_ONLY_GC_UNSAFE (gboolean, mono_class_init_internal (klass));
}
+
+/**
+ * mono_g_hash_table_new_type:
+ */
+MonoGHashTable*
+mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg)
+{
+ MONO_EXTERNAL_ONLY_GC_UNSAFE (MonoGHashTable*, mono_g_hash_table_new_type_internal (hash_func, key_equal_func, type, source, key, msg));
+}
+
+/**
+ * mono_config_for_assembly:
+ */
+void
+mono_config_for_assembly (MonoImage *assembly)
+{
+ MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_config_for_assembly_internal (assembly));
+}
+
+/**
+ * mono_class_get_property_from_name:
+ * \param klass a class
+ * \param name name of the property to lookup in the specified class
+ *
+ * Use this method to lookup a property in a class
+ * \returns the \c MonoProperty with the given name, or NULL if the property
+ * does not exist on the \p klass.
+ */
+MonoProperty*
+mono_class_get_property_from_name (MonoClass *klass, const char *name)
+{
+ MONO_EXTERNAL_ONLY_GC_UNSAFE (MonoProperty*, mono_class_get_property_from_name_internal (klass, name));
+}
+
+/**
+ * mono_class_is_subclass_of:
+ * \param klass class to probe if it is a subclass of another one
+ * \param klassc the class we suspect is the base class
+ * \param check_interfaces whether we should perform interface checks
+ *
+ * This method determines whether \p klass is a subclass of \p klassc.
+ *
+ * If the \p check_interfaces flag is set, then if \p klassc is an interface
+ * this method return TRUE if the \p klass implements the interface or
+ * if \p klass is an interface, if one of its base classes is \p klass.
+ *
+ * If \p check_interfaces is false, then if \p klass is not an interface,
+ * it returns TRUE if the \p klass is a subclass of \p klassc.
+ *
+ * if \p klass is an interface and \p klassc is \c System.Object, then this function
+ * returns TRUE.
+ *
+ */
+gboolean
+mono_class_is_subclass_of (MonoClass *klass, MonoClass *klassc, gboolean check_interfaces)
+{
+ MONO_EXTERNAL_ONLY_GC_UNSAFE (gboolean, mono_class_is_subclass_of_internal (klass, klassc, check_interfaces));
+}
+
+/**
+ * mono_domain_set_internal:
+ * \param domain the new domain
+ *
+ * Sets the current domain to \p domain.
+ */
+void
+mono_domain_set_internal (MonoDomain *domain)
+{
+ MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_domain_set_internal_with_options (domain, TRUE));
+}
+
+/**
+ * mono_domain_set:
+ * \param domain domain
+ * \param force force setting.
+ *
+ * Set the current appdomain to \p domain. If \p force is set, set it even
+ * if it is being unloaded.
+ *
+ * \returns TRUE on success; FALSE if the domain is unloaded
+ */
+gboolean
+mono_domain_set (MonoDomain *domain, gboolean force)
+{
+ if (!force && domain->state == MONO_APPDOMAIN_UNLOADED)
+ return FALSE;
+
+ MONO_EXTERNAL_ONLY_GC_UNSAFE_VOID (mono_domain_set_internal_with_options (domain, TRUE));
+ return TRUE;
+}
/* g_print ("Finalize run on %p %s.%s\n", o, mono_object_class (o)->name_space, mono_object_class (o)->name); */
/* Use _internal here, since this thread can enter a doomed appdomain */
- mono_domain_set_internal (mono_object_domain (o));
+ mono_domain_set_internal_with_options (mono_object_domain (o), TRUE);
/* delegates that have a native function pointer allocated are
* registered for finalization, but they don't have a Finalize
MonoDelegate* del = (MonoDelegate*)o;
if (del->delegate_trampoline)
mono_delegate_free_ftnptr ((MonoDelegate*)o);
- mono_domain_set_internal (caller_domain);
+ mono_domain_set_internal_with_options (caller_domain, TRUE);
return;
}
* of finalizer on object with CCW.
*/
if (mono_marshal_free_ccw (o) && !finalizer) {
- mono_domain_set_internal (caller_domain);
+ mono_domain_set_internal_with_options (caller_domain, TRUE);
return;
}
if (exc)
mono_thread_internal_unhandled_exception (exc);
- mono_domain_set_internal (caller_domain);
+ mono_domain_set_internal_with_options (caller_domain, TRUE);
}
/*
return FALSE;
/* It's only safe to copy between arrays if we can ensure the source will always have a subtype of the destination. We bail otherwise. */
- if (!mono_class_is_subclass_of (src_class, dest_class, FALSE))
+ if (!mono_class_is_subclass_of_internal (src_class, dest_class, FALSE))
return FALSE;
if (m_class_is_native_pointer (src_class) || m_class_is_native_pointer (dest_class))
break;
}
if (!is_generic_parameter (m_class_get_byval_arg (c))) {
- result = mono_class_is_subclass_of (c, baseClass, FALSE);
+ result = mono_class_is_subclass_of_internal (c, baseClass, FALSE);
break;
} else
c = mono_generic_param_get_base_type (c);
}
} else {
- result = mono_class_is_subclass_of (childClass, baseClass, FALSE);
+ result = mono_class_is_subclass_of_internal (childClass, baseClass, FALSE);
}
done:
mono_error_set_pending_exception (error);
return ret;
if ((method->flags & METHOD_ATTRIBUTE_FINAL) || !(method->flags & METHOD_ATTRIBUTE_VIRTUAL)) {
- if (klass == method->klass || mono_class_is_subclass_of (klass, method->klass, FALSE))
+ if (klass == method->klass || mono_class_is_subclass_of_internal (klass, method->klass, FALSE))
ret = rmethod;
return ret;
}
if (offs >= 0)
res = vtable [offs + method->slot];
} else {
- if (!(klass == method->klass || mono_class_is_subclass_of (klass, method->klass, FALSE)))
+ if (!(klass == method->klass || mono_class_is_subclass_of_internal (klass, method->klass, FALSE)))
return ret;
if (method->slot != -1)
#endif
if (mono_class_try_get_safehandle_class () != NULL && t->data.klass &&
- mono_class_is_subclass_of (t->data.klass, mono_class_try_get_safehandle_class (), FALSE))
+ mono_class_is_subclass_of_internal (t->data.klass, mono_class_try_get_safehandle_class (), FALSE))
return get_marshal_cb ()->emit_marshal_safehandle (m, argnum, t, spec, conv_arg, conv_arg_type, action);
return get_marshal_cb ()->emit_marshal_object (m, argnum, t, spec, conv_arg, conv_arg_type, action);
--- /dev/null
+/**
+ * \file
+ */
+
+#ifndef __MONO_METADATA_CONFIG_INTERNALS_H__
+#define __MONO_METADATA_CONFIG_INTERNALS_H__
+
+#include "mono/metadata/mono-config.h"
+
+void
+mono_config_for_assembly_internal (MonoImage *assembly);
+
+#endif /* __MONO_METADATA_CONFIG_INTERNALS_H__ */
#include "mono/metadata/assembly.h"
#include "mono/metadata/loader.h"
#include "mono/metadata/mono-config.h"
+#include "mono/metadata/mono-config-internals.h"
#include "mono/metadata/metadata-internals.h"
#include "mono/metadata/object-internals.h"
#include "mono/utils/mono-logger-internals.h"
#endif
#endif
-static void mono_config_for_assembly_internal (MonoImage *assembly);
-
/**
* mono_config_get_os:
*
return NULL;
}
-/**
- * mono_config_for_assembly:
- */
-void
-mono_config_for_assembly (MonoImage *assembly)
-{
- MONO_ENTER_GC_UNSAFE;
- mono_config_for_assembly_internal (assembly);
- MONO_EXIT_GC_UNSAFE;
-}
-
void
mono_config_for_assembly_internal (MonoImage *assembly)
{
MONO_API void mono_config_cleanup (void);
MONO_API void mono_config_parse (const char *filename);
-MONO_API void mono_config_for_assembly (MonoImage *assembly);
+MONO_API MONO_RT_EXTERNAL_ONLY void mono_config_for_assembly (MonoImage *assembly);
MONO_API void mono_config_parse_memory (const char *buffer);
MONO_API const char* mono_config_string_for_assembly_file (const char *filename);
--- /dev/null
+/**
+ * \file
+ */
+
+#ifndef __MONO_G_HASH_INTERNALS_H__
+#define __MONO_G_HASH_INTERNALS_H__
+
+#include "mono/metadata/mono-hash.h"
+#include "mono/metadata/mono-gc.h"
+
+MonoGHashTable *
+mono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);
+
+void
+mono_g_hash_table_insert_internal (MonoGHashTable *h, gpointer k, gpointer v);
+
+#endif /* __MONO_G_HASH_INTERNALS_H__ */
#include <stdio.h>
#include <math.h>
#include <glib.h>
+
#include "mono-hash.h"
+#include "mono-hash-internals.h"
#include "metadata/gc-internals.h"
+
#include <mono/utils/checked-build.h>
#include <mono/utils/mono-threads-coop.h>
#include <mono/utils/unlocked.h>
const char *msg;
};
-MonoGHashTable *
-mono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);
-
#if UNUSED
static gboolean
test_prime (int x)
return i;
}
-
-MonoGHashTable *
-mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg)
-{
- MonoGHashTable *result;
- MONO_ENTER_GC_UNSAFE;
- result = mono_g_hash_table_new_type_internal (hash_func, key_equal_func, type, source, key, msg);
- MONO_EXIT_GC_UNSAFE;
- return result;
-}
-
-
MonoGHashTable *
mono_g_hash_table_new_type_internal (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg)
{
mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v)
{
MONO_ENTER_GC_UNSAFE;
- mono_g_hash_table_insert_replace (h, k, v, FALSE);
+ mono_g_hash_table_insert_internal (h, k, v);
MONO_EXIT_GC_UNSAFE;
}
+void
+mono_g_hash_table_insert_internal (MonoGHashTable *h, gpointer k, gpointer v)
+{
+ MONO_REQ_GC_UNSAFE_MODE;
+ mono_g_hash_table_insert_replace (h, k, v, FALSE);
+}
+
/**
* mono_g_hash_table_replace:
*/
typedef struct _MonoGHashTable MonoGHashTable;
-MONO_API MonoGHashTable *mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);
+MONO_API MONO_RT_EXTERNAL_ONLY MonoGHashTable *
+mono_g_hash_table_new_type (GHashFunc hash_func, GEqualFunc key_equal_func, MonoGHashGCType type, MonoGCRootSource source, void *key, const char *msg);
MONO_API guint mono_g_hash_table_size (MonoGHashTable *hash);
MONO_API gpointer mono_g_hash_table_lookup (MonoGHashTable *hash, gconstpointer key);
MONO_API gboolean mono_g_hash_table_lookup_extended (MonoGHashTable *hash, gconstpointer key, gpointer *orig_key, gpointer *value);
MONO_API gboolean mono_g_hash_table_remove (MonoGHashTable *hash, gconstpointer key);
MONO_API guint mono_g_hash_table_foreach_remove (MonoGHashTable *hash, GHRFunc func, gpointer user_data);
MONO_API void mono_g_hash_table_destroy (MonoGHashTable *hash);
-MONO_API void mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v);
+MONO_API MONO_RT_EXTERNAL_ONLY void mono_g_hash_table_insert (MonoGHashTable *h, gpointer k, gpointer v);
MONO_API void mono_g_hash_table_replace (MonoGHashTable *h, gpointer k, gpointer v);
MONO_API void mono_g_hash_table_print_stats (MonoGHashTable *table);
#include "mono/metadata/class-init.h"
#include <mono/metadata/assembly.h>
#include <mono/metadata/marshal.h>
+#include <mono/metadata/mono-hash-internals.h>
#include "mono/metadata/debug-helpers.h"
#include <mono/metadata/threads.h>
#include <mono/metadata/threads-types.h>
if (mono_domain_get () != domain) {
/* Transfer into the target domain */
last_domain = mono_domain_get ();
- if (!mono_domain_set (domain, FALSE)) {
+ if (!mono_domain_set_fast (domain, FALSE)) {
vtable->initialized = 1;
mono_type_initialization_unlock ();
mono_error_set_exception_instance (error, mono_get_exception_appdomain_unloaded ());
*/
mono_domain_lock (domain);
if (!domain->type_init_exception_hash)
- domain->type_init_exception_hash = mono_g_hash_table_new_type (mono_aligned_addr_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Type Initialization Exception Table");
- mono_g_hash_table_insert (domain->type_init_exception_hash, klass, exc_to_throw);
+ domain->type_init_exception_hash = mono_g_hash_table_new_type_internal (mono_aligned_addr_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Type Initialization Exception Table");
+ mono_g_hash_table_insert_internal (domain->type_init_exception_hash, klass, exc_to_throw);
mono_domain_unlock (domain);
}
if (last_domain)
- mono_domain_set (last_domain, TRUE);
+ mono_domain_set_fast (last_domain, TRUE);
/* Signal to the other threads that we are done */
mono_type_init_lock (lock);
if (res)
MONO_HANDLE_ASSIGN_RAW (s, res);
else
- mono_g_hash_table_insert (ldstr_table, MONO_HANDLE_RAW (s), MONO_HANDLE_RAW (s));
+ mono_g_hash_table_insert_internal (ldstr_table, MONO_HANDLE_RAW (s), MONO_HANDLE_RAW (s));
ldstr_unlock ();
return s;
}
/* Even though this method is virtual, it's safe to invoke directly, since the object type matches. */
if (!handle_set)
- handle_set = mono_class_get_property_from_name (mono_defaults.manualresetevent_class, "Handle")->set;
+ handle_set = mono_class_get_property_from_name_internal (mono_defaults.manualresetevent_class, "Handle")->set;
params [0] = &handle;
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/verify-internals.h>
#include <mono/metadata/mono-ptr-array.h>
+#include <mono/metadata/mono-hash-internals.h>
#include <mono/utils/mono-string.h>
#include <mono/utils/mono-error-internals.h>
#include <mono/utils/checked-build.h>
mono_loader_lock (); /*FIXME mono_class_init_internal and mono_class_vtable acquire it*/
mono_domain_lock (domain);
if (!domain->type_hash)
- domain->type_hash = mono_g_hash_table_new_type ((GHashFunc)mono_metadata_type_hash,
+ domain->type_hash = mono_g_hash_table_new_type_internal ((GHashFunc)mono_metadata_type_hash,
(GCompareFunc)mono_metadata_type_equal, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DOMAIN, domain, "Domain Reflection Type Table");
if ((res = (MonoReflectionType *)mono_g_hash_table_lookup (domain->type_hash, type))) {
mono_domain_unlock (domain);
mono_loader_unlock ();
return NULL;
}
- mono_g_hash_table_insert (domain->type_hash, type, res);
+ mono_g_hash_table_insert_internal (domain->type_hash, type, res);
mono_domain_unlock (domain);
mono_loader_unlock ();
return res;
}
res->type = type;
- mono_g_hash_table_insert (domain->type_hash, type, res);
+ mono_g_hash_table_insert_internal (domain->type_hash, type, res);
if (type->type == MONO_TYPE_VOID)
domain->typeof_void = (MonoObject*)res;
* to the reflection objects representing their generic definitions.
*/
mono_image_lock ((MonoImage*)image);
- mono_g_hash_table_insert (image->generic_def_objects, imethod, MONO_HANDLE_RAW (rmethod));
+ mono_g_hash_table_insert_internal (image->generic_def_objects, imethod, MONO_HANDLE_RAW (rmethod));
mono_image_unlock ((MonoImage*)image);
}
#include "mono/metadata/tabledefs.h"
#include "mono/metadata/exception.h"
#include "mono/metadata/debug-helpers.h"
+#include "mono/metadata/domain-internals.h"
#include "mono/metadata/reflection-internals.h"
#include "mono/metadata/assembly.h"
#include "icall-decl.h"
MonoDomain *current_domain = mono_domain_get ();
MonoDomain *domain = mono_domain_get_by_id (id);
- if (!domain || !mono_domain_set (domain, FALSE)) {
+ if (!domain || !mono_domain_set_fast (domain, FALSE)) {
mono_set_pending_exception (mono_get_exception_appdomain_unloaded ());
return 0;
}
#include "mono/metadata/dynamic-image-internals.h"
#include "mono/metadata/dynamic-stream-internals.h"
#include "mono/metadata/mono-ptr-array.h"
+#include "mono/metadata/mono-hash-internals.h"
#include "mono/metadata/object-internals.h"
#include "mono/metadata/sre-internals.h"
#include "mono/metadata/security-manager.h"
* fixup_cattrs () needs to fix this up. We can't use image->tokens, since it contains the old token for the
* method, not the one returned by mono_image_create_token ().
*/
- mono_g_hash_table_insert (assembly->remapped_tokens, GUINT_TO_POINTER (token), cattr->ctor);
+ mono_g_hash_table_insert_internal (assembly->remapped_tokens, GUINT_TO_POINTER (token), cattr->ctor);
break;
case MONO_TABLE_MEMBERREF:
type |= MONO_CUSTOM_ATTR_TYPE_MEMBERREF;
idx = mono_image_add_stream_data (&assembly->code, &flags, 1);
/* add to the fixup todo list */
if (mb->ilgen && mb->ilgen->num_token_fixups)
- mono_g_hash_table_insert (assembly->token_fixups, mb->ilgen, GUINT_TO_POINTER (idx + 1));
+ mono_g_hash_table_insert_internal (assembly->token_fixups, mb->ilgen, GUINT_TO_POINTER (idx + 1));
mono_image_add_stream_data (&assembly->code, mono_array_addr_internal (code, char, 0), code_size);
return assembly->text_rva + idx;
}
idx = mono_image_add_stream_data (&assembly->code, fat_header, 12);
/* add to the fixup todo list */
if (mb->ilgen && mb->ilgen->num_token_fixups)
- mono_g_hash_table_insert (assembly->token_fixups, mb->ilgen, GUINT_TO_POINTER (idx + 12));
+ mono_g_hash_table_insert_internal (assembly->token_fixups, mb->ilgen, GUINT_TO_POINTER (idx + 12));
mono_image_add_stream_data (&assembly->code, mono_array_addr_internal (code, char, 0), code_size);
if (num_exception) {
#endif
#include <mono/metadata/gc-internals.h>
+#include <mono/metadata/mono-hash-internals.h>
#include <mono/metadata/mono-mlist.h>
#include <mono/metadata/threadpool.h>
#include <mono/utils/atomic.h>
return 0;
}
- states = mono_g_hash_table_new_type (g_direct_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREAD_POOL, NULL, "Thread Pool I/O State Table");
+ states = mono_g_hash_table_new_type_internal (g_direct_hash, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREAD_POOL, NULL, "Thread Pool I/O State Table");
while (!mono_runtime_is_shutting_down ()) {
gint i, j;
#include <glib.h>
#include <mono/metadata/class-internals.h>
+#include <mono/metadata/domain-internals.h>
#include <mono/metadata/exception.h>
#include <mono/metadata/gc-internals.h>
#include <mono/metadata/object.h>
mono_runtime_invoke_checked (unsafe_queue_custom_work_item_method, NULL, args, error);
} else {
mono_thread_push_appdomain_ref (domain);
- if (mono_domain_set (domain, FALSE)) {
+ if (mono_domain_set_fast (domain, FALSE)) {
mono_runtime_invoke_checked (unsafe_queue_custom_work_item_method, NULL, args, error);
- mono_domain_set (current_domain, TRUE);
+ mono_domain_set_fast (current_domain, TRUE);
} else {
- // mono_domain_set failing still leads to success.
+ // mono_domain_set_fast failing still leads to success.
}
mono_thread_pop_appdomain_ref ();
}
ThreadState_Background);
mono_thread_push_appdomain_ref (tpdomain->domain);
- if (mono_domain_set (tpdomain->domain, FALSE)) {
+ if (mono_domain_set_fast (tpdomain->domain, FALSE)) {
MonoObject *exc = NULL, *res;
res = try_invoke_perform_wait_callback (&exc, error);
retire = TRUE;
}
- mono_domain_set (mono_get_root_domain (), TRUE);
+ mono_domain_set_fast (mono_get_root_domain (), TRUE);
}
mono_thread_pop_appdomain_ref ();
#include <mono/metadata/exception.h>
#include <mono/metadata/environment.h>
#include <mono/metadata/monitor.h>
+#include <mono/metadata/mono-hash-internals.h>
#include <mono/metadata/gc-internals.h>
#include <mono/metadata/marshal.h>
#include <mono/metadata/runtime.h>
domain = mono_object_domain (thread);
mono_thread_push_appdomain_ref (domain);
- if (!mono_domain_set (domain, force_domain)) {
+ if (!mono_domain_set_fast (domain, force_domain)) {
mono_thread_pop_appdomain_ref ();
goto fail;
}
mono_g_hash_table_remove (threads_starting_up, thread);
if (!threads) {
- threads = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREADING, NULL, "Thread Table");
+ threads = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_THREADING, NULL, "Thread Table");
}
/* We don't need to duplicate thread->handle, because it is
* only closed when the thread object is finalized by the GC. */
- mono_g_hash_table_insert (threads, (gpointer)(gsize)(internal->tid), internal);
+ mono_g_hash_table_insert_internal (threads, (gpointer)(gsize)(internal->tid), internal);
/* We have to do this here because mono_thread_start_cb
* requires that root_domain_thread is set up. */
return FALSE;
}
if (threads_starting_up == NULL) {
- threads_starting_up = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_THREADING, NULL, "Thread Starting Table");
+ threads_starting_up = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_KEY_VALUE_GC, MONO_ROOT_SOURCE_THREADING, NULL, "Thread Starting Table");
}
- mono_g_hash_table_insert (threads_starting_up, thread, thread);
+ mono_g_hash_table_insert_internal (threads_starting_up, thread, thread);
mono_threads_unlock ();
internal->threadpool_thread = flags & MONO_THREAD_CREATE_FLAGS_THREADPOOL;
if (mono_thread_internal_current_is_attached ()) {
if (domain != mono_domain_get ())
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
/* Already attached */
return mono_thread_current ();
}
mono_thread_set_state (mono_thread_internal_current (), ThreadState_Background);
}
- if (orig != domain)
- mono_domain_set (domain, TRUE);
-
if (mono_threads_is_blocking_transition_enabled ()) {
if (external) {
/* mono_thread_attach put the thread in RUNNING mode from STARTING, but we need to
}
}
+ if (orig != domain)
+ mono_domain_set_fast (domain, TRUE);
+
return orig;
}
MonoDomain *domain = mono_domain_get ();
g_assert (domain);
- if (mono_threads_is_blocking_transition_enabled ()) {
- /* it won't do anything if cookie is NULL
- * thread state RUNNING -> (RUNNING|BLOCKING) */
- mono_threads_exit_gc_unsafe_region_unbalanced_internal (cookie, stackdata);
- }
-
if (orig != domain) {
if (!orig)
mono_domain_unset ();
else
- mono_domain_set (orig, TRUE);
+ mono_domain_set_fast (orig, TRUE);
+ }
+
+ if (mono_threads_is_blocking_transition_enabled ()) {
+ /* it won't do anything if cookie is NULL
+ * thread state RUNNING -> (RUNNING|BLOCKING) */
+ mono_threads_exit_gc_unsafe_region_unbalanced_internal (cookie, stackdata);
}
}
#include <mono/metadata/mono-debug.h>
#include <mono/metadata/debug-internals.h>
+#include <mono/metadata/domain-internals.h>
#include <mono/metadata/gc-internals.h>
#include <mono/metadata/environment.h>
+#include <mono/metadata/mono-hash-internals.h>
#include <mono/metadata/threads-types.h>
#include <mono/metadata/threadpool.h>
#include <mono/metadata/assembly.h>
/* Needed by the hash_table_new_type () call below */
mono_gc_base_init ();
- thread_to_tls = mono_g_hash_table_new_type ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger TLS Table");
+ thread_to_tls = mono_g_hash_table_new_type_internal ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger TLS Table");
- tid_to_thread = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger Thread Table");
+ tid_to_thread = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger Thread Table");
- tid_to_thread_obj = mono_g_hash_table_new_type (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger Thread Object Table");
+ tid_to_thread_obj = mono_g_hash_table_new_type_internal (NULL, NULL, MONO_HASH_VALUE_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger Thread Object Table");
pending_assembly_loads = g_ptr_array_new ();
{
objrefs = g_hash_table_new_full (NULL, NULL, NULL, mono_debugger_free_objref);
obj_to_objref = g_hash_table_new (NULL, NULL);
- suspended_objs = mono_g_hash_table_new_type ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger Suspended Object Table");
+ suspended_objs = mono_g_hash_table_new_type_internal ((GHashFunc)mono_object_hash_internal, NULL, MONO_HASH_KEY_GC, MONO_ROOT_SOURCE_DEBUGGER, NULL, "Debugger Suspended Object Table");
}
static void
* Have to keep object refs created during suspensions alive for the duration of the suspension, so GCs during invokes don't collect them.
*/
dbg_lock ();
- mono_g_hash_table_insert (suspended_objs, obj, NULL);
+ mono_g_hash_table_insert_internal (suspended_objs, obj, NULL);
dbg_unlock ();
}
DEBUG_PRINTF (1, "[%p] Thread started, obj=%p, tls=%p.\n", (gpointer)tid, thread, tls);
mono_loader_lock ();
- mono_g_hash_table_insert (thread_to_tls, thread, tls);
- mono_g_hash_table_insert (tid_to_thread, (gpointer)tid, thread);
- mono_g_hash_table_insert (tid_to_thread_obj, GUINT_TO_POINTER (tid), mono_thread_current ());
+ mono_g_hash_table_insert_internal (thread_to_tls, thread, tls);
+ mono_g_hash_table_insert_internal (tid_to_thread, (gpointer)tid, thread);
+ mono_g_hash_table_insert_internal (tid_to_thread_obj, GUINT_TO_POINTER (tid), mono_thread_current ());
mono_loader_unlock ();
process_profiler_event (EVENT_KIND_THREAD_START, thread);
old_domain = mono_domain_get ();
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
mono_loader_lock ();
g_hash_table_foreach (info->loaded_classes, emit_type_load, NULL);
mono_loader_unlock ();
- mono_domain_set (old_domain, TRUE);
+ mono_domain_set_fast (old_domain, TRUE);
}
static void
old_domain = mono_domain_get ();
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
mono_domain_assemblies_lock (domain);
for (tmp = domain->domain_assemblies; tmp; tmp = tmp->next) {
}
mono_domain_assemblies_unlock (domain);
- mono_domain_set (old_domain, TRUE);
+ mono_domain_set_fast (old_domain, TRUE);
}
static void
MonoDomain *d = mono_domain_get ();
/* This is needed to be able to find referenced assemblies */
- res = mono_domain_set (domain, FALSE);
+ res = mono_domain_set_fast (domain, FALSE);
g_assert (res);
if (!mono_reflection_parse_type_checked (s, &info, error)) {
mono_reflection_free_type_info (&info);
g_free (s);
- mono_domain_set (d, TRUE);
+ mono_domain_set_fast (d, TRUE);
break;
}
old_domain = mono_domain_get ();
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
err = type_commands_internal (command, klass, domain, p, end, buf);
- mono_domain_set (old_domain, TRUE);
+ mono_domain_set_fast (old_domain, TRUE);
return err;
}
old_domain = mono_domain_get ();
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
err = method_commands_internal (command, method, domain, p, end, buf);
- mono_domain_set (old_domain, TRUE);
+ mono_domain_set_fast (old_domain, TRUE);
return err;
}
#include "config.h"
#include <string.h>
#include <mono/metadata/appdomain.h>
+#include <mono/metadata/class-internals.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/exception.h>
#include <mono/metadata/exception-internals.h>
}
g_error ("TODO: interp_transform_call %s:%s", m_class_get_name (target_method->klass), tm);
- } else if (mono_class_is_subclass_of (target_method->klass, mono_defaults.array_class, FALSE)) {
+ } else if (mono_class_is_subclass_of_internal (target_method->klass, mono_defaults.array_class, FALSE)) {
if (!strcmp (tm, "get_Rank")) {
*op = MINT_ARRAY_RANK;
} else if (!strcmp (tm, "get_Length")) {
CHECK_CFG_EXCEPTION;
} else if ((cfg->opt & MONO_OPT_INLINE) && cmethod && !context_used && !vtable_arg &&
mono_method_check_inlining (cfg, cmethod) &&
- !mono_class_is_subclass_of (cmethod->klass, mono_defaults.exception_class, FALSE)) {
+ !mono_class_is_subclass_of_internal (cmethod->klass, mono_defaults.exception_class, FALSE)) {
int costs;
if ((costs = inline_method (cfg, cmethod, fsig, sp, ip, cfg->real_offset, FALSE))) {
#include <mono/metadata/threads.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/debug-helpers.h>
+#include <mono/metadata/domain-internals.h>
#include <mono/metadata/profiler-private.h>
#include <mono/metadata/mono-config.h>
#include <mono/metadata/environment.h>
orig = mono_domain_get ();
if (orig != domain)
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
return orig != domain ? orig : NULL;
}
g_assert (!mono_threads_is_blocking_transition_enabled ());
if (domain)
- mono_domain_set (domain, TRUE);
+ mono_domain_set_fast (domain, TRUE);
}
/**