X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fappdomain.h;h=e9b86919c0e1b464dc0b0179045a745f1b9f1135;hb=5deacd7bfab90873f2fe83582e31fc982c42775e;hp=1bd35859f967b0be762eefa3c746eaa2696b1383;hpb=389d8b96ebb1ec6d335ca915d89102ab43203fb2;p=mono.git diff --git a/mono/metadata/appdomain.h b/mono/metadata/appdomain.h index 1bd35859f96..e9b86919c0e 100644 --- a/mono/metadata/appdomain.h +++ b/mono/metadata/appdomain.h @@ -18,7 +18,9 @@ #include #include -typedef void (*MonoThreadStartCB) (gpointer stack_start); +typedef void (*MonoThreadStartCB) (guint32 tid, gpointer stack_start, + gpointer func); +typedef void (*MonoThreadAttachCB) (guint32 tid, gpointer stack_start); /* This is a copy of System.AppDomainSetup */ typedef struct { @@ -34,6 +36,7 @@ typedef struct { MonoString *shadow_copy_directories; MonoString *shadow_copy_files; MonoBoolean publisher_policy; + MonoBoolean path_changed; } MonoAppDomainSetup; typedef GArray MonoJitInfoTable; @@ -55,9 +58,18 @@ typedef struct { int code_size; guint32 used_regs; unsigned num_clauses; + signed exvar_offset; + /* Whenever the code is domain neutral or 'shared' */ + gboolean domain_neutral:1; MonoJitExceptionInfo *clauses; } MonoJitInfo; +typedef struct { + MonoObject obj; + gint32 domain_id; + gint32 context_id; +} MonoAppContext; + typedef struct _MonoAppDomain MonoAppDomain; struct _MonoDomain { @@ -67,6 +79,7 @@ struct _MonoDomain { MonoMemPool *code_mp; MonoGHashTable *env; GHashTable *assemblies; + MonoAssembly *entry_assembly; MonoAppDomainSetup *setup; char *friendly_name; MonoGHashTable *ldstr_table; @@ -78,11 +91,22 @@ struct _MonoDomain { /* hashtables for Reflection handles */ MonoGHashTable *type_hash; MonoGHashTable *refobject_hash; + /* Needed by Thread:GetDomainID() */ + gint32 domain_id; + /* Used when loading assemblies */ + gchar **search_path; + /* Used by remoting proxies */ + MonoMethod *create_proxy_for_type_method; + MonoMethod *private_invoke_method; + MonoAppContext *default_context; + GHashTable *thread_static_fields; + GHashTable *jump_target_hash; + MonoGHashTable *class_init_trampoline_hash; }; /* This is a copy of System.AppDomain */ struct _MonoAppDomain { - MonoObject object; + MonoMarshalByRefObject mbr; MonoDomain *data; }; @@ -90,35 +114,58 @@ extern MonoDomain *mono_root_domain; extern HANDLE mono_delegate_semaphore; extern CRITICAL_SECTION mono_delegate_section; -extern int mono_runtime_shutdown; #define mono_domain_lock(domain) EnterCriticalSection(&(domain)->lock) #define mono_domain_unlock(domain) LeaveCriticalSection(&(domain)->lock) +typedef void (*MonoDomainFunc) (MonoDomain *domain, gpointer user_data); + MonoDomain* mono_init (const char *filename); void -mono_runtime_init (MonoDomain *domain, MonoThreadStartCB start_cb); +mono_runtime_init (MonoDomain *domain, MonoThreadStartCB start_cb, + MonoThreadAttachCB attach_cb); void mono_runtime_cleanup (MonoDomain *domain); +void +mono_runtime_install_cleanup (MonoDomainFunc func); + +void +mono_runtime_quit (void); + MonoDomain * mono_domain_create (void); inline MonoDomain * mono_domain_get (void); +inline MonoDomain * +mono_domain_get_by_id (gint32 domainid); + inline void mono_domain_set (MonoDomain *domain); +void +mono_domain_foreach (MonoDomainFunc func, gpointer user_data); + MonoAssembly * mono_domain_assembly_open (MonoDomain *domain, const char *name); +void +mono_domain_finalize (MonoDomain *domain); + void mono_domain_unload (MonoDomain *domain, gboolean force); +gboolean +mono_domain_has_type_resolve (MonoDomain *domain); + +MonoReflectionAssembly * +mono_domain_try_type_resolve (MonoDomain *domain, char *name, MonoObject *tb); + void mono_jit_info_table_add (MonoDomain *domain, MonoJitInfo *ji); @@ -162,7 +209,7 @@ ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad, MonoObject *evidence); void -ves_icall_System_AppDomain_Unload (MonoAppDomain *ad); +ves_icall_System_AppDomain_InternalUnload (gint32 domain_id); gint32 ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad, @@ -170,4 +217,35 @@ ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad, MonoObject *evidence, MonoArray *args); +void +mono_context_init (MonoDomain *domain); + +inline void +mono_context_set (MonoAppContext *new_context); + +inline MonoAppContext * +mono_context_get (void); + +MonoAppDomain * +ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomain *ad); + +MonoAppDomain * +ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid); + +MonoAppContext * +ves_icall_System_AppDomain_InternalGetContext (void); + +MonoAppContext * +ves_icall_System_AppDomain_InternalGetDefaultContext (void); + +MonoAppContext * +ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc); + +gint32 +ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad); + +MonoString * +ves_icall_System_AppDomain_InternalGetProcessGuid (MonoString* newguid); + + #endif /* _MONO_METADATA_APPDOMAIN_H_ */