Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[mono] Remove more multi-domain functionality #48023

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 29 additions & 38 deletions src/mono/mono/metadata/appdomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,15 +188,10 @@ create_domain_objects (MonoDomain *domain)
HANDLE_FUNCTION_ENTER ();
ERROR_DECL (error);

MonoDomain *old_domain = mono_domain_get ();
MonoStringHandle arg;
MonoVTable *string_vt;
MonoClassField *string_empty_fld;

if (domain != old_domain) {
mono_domain_set_internal_with_options (domain, FALSE);
}

/*
* Initialize String.Empty. This enables the removal of
* the static cctor of the String class.
Expand Down Expand Up @@ -237,9 +232,6 @@ create_domain_objects (MonoDomain *domain)
domain->ephemeron_tombstone = MONO_HANDLE_RAW (mono_object_new_handle (domain, mono_defaults.object_class, error));
mono_error_assert_ok (error);

if (domain != old_domain)
mono_domain_set_internal_with_options (old_domain, FALSE);

/*
* This class is used during exception handling, so initialize it here, to prevent
* stack overflows while handling stack overflows.
Expand Down Expand Up @@ -431,34 +423,42 @@ mono_check_corlib_version_internal (void)
void
mono_context_init (MonoDomain *domain)
{
ERROR_DECL (error);
mono_context_init_checked (domain, error);
mono_error_cleanup (error);
g_assert_not_reached ();
}

/**
* mono_context_set:
*/
void
mono_context_init_checked (MonoDomain *domain, MonoError *error)
mono_context_set (MonoAppContext * new_context)
{
HANDLE_FUNCTION_ENTER ();

MonoClass *klass;
MonoAppContextHandle context;
}

error_init (error);
if (mono_runtime_get_no_exec ())
goto exit;
void
mono_context_set_handle (MonoAppContextHandle new_context)
{
}

klass = mono_class_load_from_name (mono_defaults.corlib, "System.Runtime.Remoting.Contexts", "Context");
context = MONO_HANDLE_CAST (MonoAppContext, mono_object_new_pinned_handle (domain, klass, error));
goto_if_nok (error, exit);
/**
* mono_context_get:
*
* Returns: the current Mono Application Context.
*/
MonoAppContext *
mono_context_get (void)
{
return NULL;
}

MONO_HANDLE_SETVAL (context, domain_id, gint32, domain->domain_id);
MONO_HANDLE_SETVAL (context, context_id, gint32, 0);
mono_threads_register_app_context (context, error);
mono_error_assert_ok (error);
domain->default_context = MONO_HANDLE_RAW (context);
exit:
HANDLE_FUNCTION_RETURN ();
/**
* mono_context_get_handle:
*
* Returns: the current Mono Application Context.
*/
MonoAppContextHandle
mono_context_get_handle (void)
{
return MONO_HANDLE_NEW (MonoAppContext, NULL);
}

/**
Expand Down Expand Up @@ -662,15 +662,6 @@ mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot)
return res;
}

gboolean
mono_domain_set_fast (MonoDomain *domain, gboolean force)
{
MONO_REQ_GC_UNSAFE_MODE;

mono_domain_set_internal_with_options (domain, TRUE);
return TRUE;
}

static gboolean
add_assembly_to_array (MonoDomain *domain, MonoArrayHandle dest, int dest_idx, MonoAssembly* assm, MonoError *error)
{
Expand Down
2 changes: 1 addition & 1 deletion src/mono/mono/metadata/assembly-load-context.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ mono_alc_init (MonoAssemblyLoadContext *alc, MonoDomain *domain, gboolean collec
alc->domain = domain;
alc->loaded_images = li;
alc->loaded_assemblies = NULL;
alc->memory_manager = mono_mem_manager_create_singleton (alc, domain, collectible);
alc->memory_manager = mono_mem_manager_create_singleton (alc, collectible);
alc->generic_memory_managers = g_ptr_array_new ();
mono_coop_mutex_init (&alc->memory_managers_lock);
alc->unloading = FALSE;
Expand Down
38 changes: 9 additions & 29 deletions src/mono/mono/metadata/class-init.c
Original file line number Diff line number Diff line change
Expand Up @@ -3961,7 +3961,6 @@ mono_class_setup_nested_types (MonoClass *klass)
/**
* mono_class_setup_runtime_info:
* \param klass the class to setup
* \param domain the domain of the \p vtable
* \param vtable
*
* Store \p vtable in \c klass->runtime_info.
Expand All @@ -3972,36 +3971,17 @@ mono_class_setup_nested_types (MonoClass *klass)
* LOCKING: domain lock and loaderlock must be held.
*/
void
mono_class_setup_runtime_info (MonoClass *klass, MonoDomain *domain, MonoVTable *vtable)
mono_class_setup_runtime_info (MonoClass *klass, MonoVTable *vtable)
{
MonoClassRuntimeInfo *old_info = m_class_get_runtime_info (klass);
if (old_info && old_info->max_domain >= domain->domain_id) {
/* someone already created a large enough runtime info */
old_info->domain_vtables [domain->domain_id] = vtable;
} else {
int new_size = domain->domain_id;
if (old_info)
new_size = MAX (new_size, old_info->max_domain);
new_size++;
/* make the new size a power of two */
int i = 2;
while (new_size > i)
i <<= 1;
new_size = i;
/* this is a bounded memory retention issue: may want to
* handle it differently when we'll have a rcu-like system.
*/
MonoClassRuntimeInfo *runtime_info = (MonoClassRuntimeInfo *)mono_image_alloc0 (m_class_get_image (klass), MONO_SIZEOF_CLASS_RUNTIME_INFO + new_size * sizeof (gpointer));
runtime_info->max_domain = new_size - 1;
/* copy the stuff from the older info */
if (old_info) {
memcpy (runtime_info->domain_vtables, old_info->domain_vtables, (old_info->max_domain + 1) * sizeof (gpointer));
}
runtime_info->domain_vtables [domain->domain_id] = vtable;
/* keep this last*/
mono_memory_barrier ();
klass->runtime_info = runtime_info;
}
if (old_info)
return;

MonoClassRuntimeInfo *runtime_info = (MonoClassRuntimeInfo *)mono_image_alloc0 (m_class_get_image (klass), sizeof (MonoClassRuntimeInfo));
runtime_info->domain_vtable = vtable;
/* keep this last*/
mono_memory_barrier ();
klass->runtime_info = runtime_info;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/mono/mono/metadata/class-init.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ void
mono_class_setup_nested_types (MonoClass *klass);

void
mono_class_setup_runtime_info (MonoClass *klass, MonoDomain *domain, MonoVTable *vtable);
mono_class_setup_runtime_info (MonoClass *klass, MonoVTable *vtable);

MonoClass *
mono_class_create_array_fill_type (void);
Expand Down
6 changes: 1 addition & 5 deletions src/mono/mono/metadata/class-internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,13 +227,9 @@ typedef enum {
* like the vtables for a domain, the GC descriptor, etc.
*/
typedef struct {
guint16 max_domain;
/* domain_vtables is indexed by the domain id and the size is max_domain + 1 */
MonoVTable *domain_vtables [MONO_ZERO_LEN_ARRAY];
MonoVTable *domain_vtable;
} MonoClassRuntimeInfo;

#define MONO_SIZEOF_CLASS_RUNTIME_INFO (sizeof (MonoClassRuntimeInfo) - MONO_ZERO_LEN_ARRAY * SIZEOF_VOID_P)

typedef struct {
MonoPropertyBagItem head;

Expand Down
9 changes: 1 addition & 8 deletions src/mono/mono/metadata/cominterop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1994,12 +1994,7 @@ cominterop_set_ccw_object_domain (MonoObject *object, MonoDomain **prev_domain)
else
obj_domain = mono_object_domain (object);

if (obj_domain != current) {
*prev_domain = current;
mono_domain_set_internal_with_options (obj_domain, FALSE);
}
else
*prev_domain = NULL;
*prev_domain = NULL;

return object;
}
Expand All @@ -2009,8 +2004,6 @@ cominterop_restore_domain (MonoDomain *domain)
{
if (!domain)
return;

mono_domain_set_internal_with_options (domain, FALSE);
}

static void
Expand Down
32 changes: 0 additions & 32 deletions src/mono/mono/metadata/domain-internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,6 @@

G_BEGIN_DECLS

/*
* If this is set, the memory belonging to appdomains is not freed when a domain is
* unloaded, and assemblies loaded by the appdomain are not unloaded either. This
* allows us to use typed gc in non-default appdomains too, leading to increased
* performance.
*/
extern gboolean mono_dont_free_domains;

typedef struct _MonoJitInfoTable MonoJitInfoTable;
typedef struct _MonoJitInfoTableChunk MonoJitInfoTableChunk;

Expand Down Expand Up @@ -307,8 +299,6 @@ struct _MonoDomain {
MonoGHashTable *ldstr_table;
#define MONO_DOMAIN_LAST_GC_TRACKED ldstr_table
guint32 state;
/* Needed by Thread:GetDomainID() */
gint32 domain_id;
/*
* For framework Mono, this is every assembly loaded in this
* domain. For netcore, this is every assembly loaded in every ALC in
Expand Down Expand Up @@ -429,17 +419,9 @@ typedef void (*MonoCreateDomainFunc) (MonoDomain *domain);
void
mono_install_create_domain_hook (MonoCreateDomainFunc func);

typedef void (*MonoFreeDomainFunc) (MonoDomain *domain);

void
mono_install_free_domain_hook (MonoFreeDomainFunc func);

void
mono_runtime_quit_internal (void);

void
mono_cleanup (void);

void
mono_close_exe_image (void);

Expand Down Expand Up @@ -493,12 +475,6 @@ mono_domain_alloc0_lock_free (MonoDomain *domain, guint size);

#define mono_domain_alloc0_lock_free(domain, size) (g_cast (mono_domain_alloc0_lock_free ((domain), (size))))

void
mono_domain_unset (void);

void
mono_domain_set_internal_with_options (MonoDomain *domain, gboolean migrate_exception);

MonoTryBlockHoleTableJitInfo*
mono_jit_info_get_try_block_hole_table_info (MonoJitInfo *ji);

Expand Down Expand Up @@ -557,14 +533,9 @@ typedef void (*MonoJitInfoFunc) (MonoJitInfo *ji, gpointer user_data);
void
mono_jit_info_table_foreach_internal (MonoDomain *domain, MonoJitInfoFunc func, gpointer user_data);

void mono_enable_debug_domain_unload (gboolean enable);

void
mono_runtime_init_checked (MonoDomain *domain, MonoThreadStartCB start_cb, MonoThreadAttachCB attach_cb, MonoError *error);

void
mono_context_init_checked (MonoDomain *domain, MonoError *error);

gboolean
mono_assembly_has_reference_assembly_attribute (MonoAssembly *assembly, MonoError *error);

Expand All @@ -577,9 +548,6 @@ mono_runtime_register_appctx_properties (int nprops, const char **keys, const c
void
mono_runtime_install_appctx_properties (void);

gboolean
mono_domain_set_fast (MonoDomain *domain, gboolean force);

MonoAssemblyLoadContext *
mono_domain_default_alc (MonoDomain *domain);

Expand Down
Loading