Skip to content

Commit b11fd8b

Browse files
authored
[mono] More domain cleanup (#50771)
* [mono] Remove appdomains_list variable, it shouldn't be needed. * Remove some GC domain code. * Remove domains from sre.c. * Remove domains from the jit info code. * Remove more domain usage from the JIT code.
1 parent 57bbdee commit b11fd8b

30 files changed

+113
-268
lines changed

src/mono/mono/metadata/appdomain.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -507,16 +507,6 @@ mono_domain_try_type_resolve_name (MonoAssembly *assembly, MonoStringHandle name
507507
HANDLE_FUNCTION_RETURN_REF (MonoReflectionAssembly, MONO_HANDLE_CAST (MonoReflectionAssembly, ret));
508508
}
509509

510-
/**
511-
* mono_domain_owns_vtable_slot:
512-
* \returns Whether \p vtable_slot is inside a vtable which belongs to \p domain.
513-
*/
514-
gboolean
515-
mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot)
516-
{
517-
return mono_mem_manager_mp_contains_addr (mono_mem_manager_get_ambient (), vtable_slot);
518-
}
519-
520510
MonoAssembly*
521511
mono_try_assembly_resolve (MonoAssemblyLoadContext *alc, const char *fname_raw, MonoAssembly *requesting, MonoError *error)
522512
{

src/mono/mono/metadata/appdomain.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ mono_domain_has_type_resolve (MonoDomain *domain);
121121
MONO_API MONO_RT_EXTERNAL_ONLY MonoReflectionAssembly *
122122
mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb);
123123

124-
MONO_API mono_bool
124+
MONO_API MONO_RT_EXTERNAL_ONLY mono_bool
125125
mono_domain_owns_vtable_slot (MonoDomain *domain, void* vtable_slot);
126126

127127
MONO_API MONO_RT_EXTERNAL_ONLY void
@@ -139,7 +139,7 @@ mono_context_get_id (MonoAppContext *context);
139139
MONO_API MONO_RT_EXTERNAL_ONLY int32_t
140140
mono_context_get_domain_id (MonoAppContext *context);
141141

142-
MONO_API MonoJitInfo *
142+
MONO_API MONO_RT_EXTERNAL_ONLY MonoJitInfo *
143143
mono_jit_info_table_find (MonoDomain *domain, void* addr);
144144

145145
/* MonoJitInfo accessors */

src/mono/mono/metadata/boehm-gc.c

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,47 +1577,6 @@ mono_gc_is_null (void)
15771577
return FALSE;
15781578
}
15791579

1580-
/**
1581-
* mono_gchandle_is_in_domain:
1582-
* \param gchandle a GCHandle's handle.
1583-
* \param domain An application domain.
1584-
*
1585-
* Use this function to determine if the \p gchandle points to an
1586-
* object allocated in the specified \p domain.
1587-
*
1588-
* \returns TRUE if the object wrapped by the \p gchandle belongs to the specific \p domain.
1589-
*/
1590-
gboolean
1591-
mono_gchandle_is_in_domain (MonoGCHandle gch, MonoDomain *domain)
1592-
{
1593-
guint32 gchandle = MONO_GC_HANDLE_TO_UINT (gch);
1594-
guint slot = MONO_GC_HANDLE_SLOT (gchandle);
1595-
guint type = MONO_GC_HANDLE_TYPE (gchandle);
1596-
HandleData *handles = &gc_handles [type];
1597-
gboolean result = FALSE;
1598-
1599-
if (type >= HANDLE_TYPE_MAX)
1600-
return FALSE;
1601-
1602-
lock_handles (handles);
1603-
if (slot < handles->size && slot_occupied (handles, slot)) {
1604-
if (MONO_GC_HANDLE_TYPE_IS_WEAK (handles->type)) {
1605-
result = domain->domain_id == handles->domain_ids [slot];
1606-
} else {
1607-
MonoObject *obj;
1608-
obj = (MonoObject *)handles->entries [slot];
1609-
if (obj == NULL)
1610-
result = TRUE;
1611-
else
1612-
result = domain == mono_object_domain (obj);
1613-
}
1614-
} else {
1615-
/* print a warning? */
1616-
}
1617-
unlock_handles (handles);
1618-
return result;
1619-
}
1620-
16211580
/**
16221581
* mono_gchandle_free_internal:
16231582
* \param gchandle a GCHandle's handle.
@@ -1659,43 +1618,6 @@ mono_gchandle_free_internal (MonoGCHandle gch)
16591618
MONO_PROFILER_RAISE (gc_handle_deleted, (gchandle, (MonoGCHandleType)handles->type));
16601619
}
16611620

1662-
/**
1663-
* mono_gchandle_free_domain:
1664-
* \param domain domain that is unloading
1665-
*
1666-
* Function used internally to cleanup any GC handle for objects belonging
1667-
* to the specified domain during appdomain unload.
1668-
*/
1669-
void
1670-
mono_gchandle_free_domain (MonoDomain *domain)
1671-
{
1672-
guint type;
1673-
1674-
for (type = HANDLE_TYPE_MIN; type < HANDLE_PINNED; ++type) {
1675-
guint slot;
1676-
HandleData *handles = &gc_handles [type];
1677-
lock_handles (handles);
1678-
for (slot = 0; slot < handles->size; ++slot) {
1679-
if (!slot_occupied (handles, slot))
1680-
continue;
1681-
if (MONO_GC_HANDLE_TYPE_IS_WEAK (type)) {
1682-
if (domain->domain_id == handles->domain_ids [slot]) {
1683-
vacate_slot (handles, slot);
1684-
if (handles->entries [slot])
1685-
mono_gc_weak_link_remove (&handles->entries [slot], handles->type == HANDLE_WEAK_TRACK);
1686-
}
1687-
} else {
1688-
if (handles->entries [slot] && mono_object_domain (handles->entries [slot]) == domain) {
1689-
vacate_slot (handles, slot);
1690-
handles->entries [slot] = NULL;
1691-
}
1692-
}
1693-
}
1694-
unlock_handles (handles);
1695-
}
1696-
1697-
}
1698-
16991621
guint64
17001622
mono_gc_get_total_allocated_bytes (MonoBoolean precise)
17011623
{

src/mono/mono/metadata/domain.c

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
mono_thread_info_tls_set (info, TLS_KEY_DOMAIN, (x)); \
6868
} while (FALSE)
6969

70-
static MonoDomain **appdomains_list;
7170
static MonoImage *exe_image;
7271
static MonoDomain *mono_root_domain;
7372

@@ -107,25 +106,6 @@ get_runtimes_from_exe (const char *exe_file, MonoImage **exe_image);
107106
static const MonoRuntimeInfo*
108107
get_runtime_by_version (const char *version);
109108

110-
//g_malloc on sgen and mono_gc_alloc_fixed on boehm
111-
static void*
112-
gc_alloc_fixed_non_heap_list (size_t size)
113-
{
114-
if (mono_gc_is_moving ())
115-
return g_malloc0 (size);
116-
else
117-
return mono_gc_alloc_fixed (size, MONO_GC_DESCRIPTOR_NULL, MONO_ROOT_SOURCE_DOMAIN, NULL, "Domain List");
118-
}
119-
120-
static void
121-
gc_free_fixed_non_heap_list (void *ptr)
122-
{
123-
if (mono_gc_is_moving ())
124-
g_free (ptr);
125-
else
126-
mono_gc_free_fixed (ptr);
127-
}
128-
129109
static MonoDomain *
130110
create_root_domain (void)
131111
{
@@ -148,10 +128,6 @@ create_root_domain (void)
148128

149129
MONO_PROFILER_RAISE (domain_loading, (domain));
150130

151-
// FIXME: why is this needed ?
152-
appdomains_list = (MonoDomain **)gc_alloc_fixed_non_heap_list (sizeof (void*));
153-
appdomains_list [0] = domain;
154-
155131
#ifndef DISABLE_PERFCOUNTERS
156132
mono_atomic_inc_i32 (&mono_perfcounters->loader_appdomains);
157133
mono_atomic_inc_i32 (&mono_perfcounters->loader_total_appdomains);

src/mono/mono/metadata/exception.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,7 +1122,6 @@ char *
11221122
mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc)
11231123
{
11241124
#ifdef HAVE_BACKTRACE_SYMBOLS
1125-
MonoDomain *domain;
11261125
MonoArrayHandle arr = MONO_HANDLE_NEW(MonoArray, NULL);
11271126
int i, len;
11281127
GString *text;
@@ -1132,7 +1131,6 @@ mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc)
11321131

11331132
if (MONO_HANDLE_IS_NULL(arr))
11341133
return g_strdup ("");
1135-
domain = mono_domain_get ();
11361134
len = mono_array_handle_length (arr);
11371135
text = g_string_new_len (NULL, len * 20);
11381136
MonoGCHandle gchandle;
@@ -1145,7 +1143,7 @@ mono_exception_handle_get_native_backtrace (MonoExceptionHandle exc)
11451143
for (i = 0; i < len; ++i) {
11461144
gpointer ip;
11471145
MONO_HANDLE_ARRAY_GETVAL (ip, arr, gpointer, i);
1148-
MonoJitInfo *ji = mono_jit_info_table_find (domain, ip);
1146+
MonoJitInfo *ji = mono_jit_info_table_find_internal (ip, TRUE, FALSE);
11491147
if (ji) {
11501148
char *msg = mono_debug_print_stack_frame (mono_jit_info_get_method (ji), (char*)ip - (char*)ji->code_start, NULL);
11511149
g_string_append_printf (text, "%s\n", msg);

src/mono/mono/metadata/external-only.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "external-only.h"
2525
#include "threads.h"
2626
#include "threads-types.h"
27+
#include "jit-info.h"
2728

2829
/**
2930
* mono_gchandle_new:
@@ -664,3 +665,34 @@ mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *typebu
664665
mono_error_cleanup (error);
665666
HANDLE_FUNCTION_RETURN_OBJ (ret);
666667
}
668+
669+
/**
670+
* mono_jit_info_table_find:
671+
* \param domain Domain that you want to look up
672+
* \param addr Points to an address with JITed code.
673+
*
674+
* Use this function to obtain a \c MonoJitInfo* object that can be used to get
675+
* some statistics. You should provide both the \p domain on which you will be
676+
* performing the probe, and an address. Since application domains can share code
677+
* the same address can be in use by multiple domains at once.
678+
*
679+
* This does not return any results for trampolines.
680+
*
681+
* \returns NULL if the address does not belong to JITed code (it might be native
682+
* code or a trampoline) or a valid pointer to a \c MonoJitInfo* .
683+
*/
684+
MonoJitInfo*
685+
mono_jit_info_table_find (MonoDomain *domain, gpointer addr)
686+
{
687+
return mono_jit_info_table_find_internal (addr, TRUE, FALSE);
688+
}
689+
690+
/**
691+
* mono_domain_owns_vtable_slot:
692+
* \returns Whether \p vtable_slot is inside a vtable which belongs to \p domain.
693+
*/
694+
gboolean
695+
mono_domain_owns_vtable_slot (MonoDomain *domain, gpointer vtable_slot)
696+
{
697+
return mono_mem_manager_mp_contains_addr (mono_mem_manager_get_ambient (), vtable_slot);
698+
}

src/mono/mono/metadata/gc-internals.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,6 @@ mono_gc_alloc_fixed_no_descriptor (size_t size, MonoGCRootSource source, void *k
121121

122122
void mono_gc_free_fixed (void* addr);
123123

124-
/* make sure the gchandle was allocated for an object in domain */
125-
gboolean mono_gchandle_is_in_domain (MonoGCHandle gchandle, MonoDomain *domain);
126-
void mono_gchandle_free_domain (MonoDomain *domain);
127-
128124
typedef void (*FinalizerThreadCallback) (gpointer user_data);
129125

130126
MonoObject*

src/mono/mono/metadata/icall-eventpipe.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ eventpipe_execute_rundown (
519519
events_data.buffer_size = 1024 * sizeof(uint32_t);
520520
events_data.buffer = g_new (uint8_t, events_data.buffer_size);
521521
events_data.method_events_func = method_events_func;
522-
mono_jit_info_table_foreach_internal (root_domain, eventpipe_fire_method_events_func, &events_data);
522+
mono_jit_info_table_foreach_internal (eventpipe_fire_method_events_func, &events_data);
523523
g_free (events_data.buffer);
524524

525525
// Iterate all assemblies in domain.

src/mono/mono/metadata/jit-info.c

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ jit_info_table_find (MonoJitInfoTable *table, MonoThreadHazardPointers *hp, gint
297297
* mono_jit_info_get_method () could fail.
298298
*/
299299
MonoJitInfo*
300-
mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean try_aot, gboolean allow_trampolines)
300+
mono_jit_info_table_find_internal (gpointer addr, gboolean try_aot, gboolean allow_trampolines)
301301
{
302302
MonoJitInfoTable *table;
303303
MonoJitInfo *ji, *module_ji;
@@ -328,7 +328,7 @@ mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean t
328328
table = (MonoJitInfoTable *)mono_get_hazardous_pointer ((gpointer volatile*)&aot_modules, hp, JIT_INFO_TABLE_HAZARD_INDEX);
329329
module_ji = jit_info_table_find (table, hp, (gint8*)addr);
330330
if (module_ji)
331-
ji = jit_info_find_in_aot_func (domain, module_ji->d.image, addr);
331+
ji = jit_info_find_in_aot_func (module_ji->d.image, addr);
332332
if (hp)
333333
mono_hazard_pointer_clear (hp, JIT_INFO_TABLE_HAZARD_INDEX);
334334
}
@@ -339,29 +339,8 @@ mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean t
339339
return ji;
340340
}
341341

342-
/**
343-
* mono_jit_info_table_find:
344-
* \param domain Domain that you want to look up
345-
* \param addr Points to an address with JITed code.
346-
*
347-
* Use this function to obtain a \c MonoJitInfo* object that can be used to get
348-
* some statistics. You should provide both the \p domain on which you will be
349-
* performing the probe, and an address. Since application domains can share code
350-
* the same address can be in use by multiple domains at once.
351-
*
352-
* This does not return any results for trampolines.
353-
*
354-
* \returns NULL if the address does not belong to JITed code (it might be native
355-
* code or a trampoline) or a valid pointer to a \c MonoJitInfo* .
356-
*/
357-
MonoJitInfo*
358-
mono_jit_info_table_find (MonoDomain *domain, gpointer addr)
359-
{
360-
return mono_jit_info_table_find_internal (domain, addr, TRUE, FALSE);
361-
}
362-
363342
void
364-
mono_jit_info_table_foreach_internal (MonoDomain *domain, MonoJitInfoFunc func, gpointer user_data)
343+
mono_jit_info_table_foreach_internal (MonoJitInfoFunc func, gpointer user_data)
365344
{
366345
MonoJitInfoTable *table;
367346
MonoJitInfo *ji;

src/mono/mono/metadata/jit-info.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,15 +282,15 @@ mono_jit_info_get_unwind_info (MonoJitInfo *ji);
282282
* Installs a new function which is used to return a MonoJitInfo for a method inside
283283
* an AOT module.
284284
*/
285-
typedef MonoJitInfo *(*MonoJitInfoFindInAot) (MonoDomain *domain, MonoImage *image, gpointer addr);
285+
typedef MonoJitInfo *(*MonoJitInfoFindInAot) (MonoImage *image, gpointer addr);
286286
void mono_install_jit_info_find_in_aot (MonoJitInfoFindInAot func);
287287

288-
MonoJitInfo* mono_jit_info_table_find_internal (MonoDomain *domain, gpointer addr, gboolean try_aot, gboolean allow_trampolines);
288+
MonoJitInfo* mono_jit_info_table_find_internal (gpointer addr, gboolean try_aot, gboolean allow_trampolines);
289289

290290
typedef void (*MonoJitInfoFunc) (MonoJitInfo *ji, gpointer user_data);
291291

292292
void
293-
mono_jit_info_table_foreach_internal (MonoDomain *domain, MonoJitInfoFunc func, gpointer user_data);
293+
mono_jit_info_table_foreach_internal (MonoJitInfoFunc func, gpointer user_data);
294294

295295
void
296296
mono_jit_code_hash_init (MonoInternalHashTable *jit_code_hash);

0 commit comments

Comments
 (0)