MonoString *shadow_copy_directories;
MonoString *shadow_copy_files;
MonoBoolean publisher_policy;
+ MonoBoolean path_changed;
+ int loader_optimization;
+ MonoBoolean disallow_binding_redirects;
+ MonoBoolean disallow_code_downloads;
} MonoAppDomainSetup;
typedef GArray MonoJitInfoTable;
guint32 used_regs;
unsigned num_clauses;
signed exvar_offset;
+ /* Whenever the code is domain neutral or 'shared' */
+ gboolean domain_neutral:1;
MonoJitExceptionInfo *clauses;
} MonoJitInfo;
MonoObject obj;
gint32 domain_id;
gint32 context_id;
+ gpointer *static_data;
} MonoAppContext;
+typedef enum {
+ MONO_APPDOMAIN_CREATED,
+ MONO_APPDOMAIN_UNLOADING,
+ MONO_APPDOMAIN_UNLOADED
+} MonoAppDomainState;
+
typedef struct _MonoAppDomain MonoAppDomain;
struct _MonoDomain {
MonoAssembly *entry_assembly;
MonoAppDomainSetup *setup;
char *friendly_name;
+ guint32 state;
MonoGHashTable *ldstr_table;
MonoGHashTable *class_vtable_hash;
MonoGHashTable *proxy_vtable_hash;
MonoMethod *create_proxy_for_type_method;
MonoMethod *private_invoke_method;
MonoAppContext *default_context;
+ MonoException *out_of_memory_ex;
+ /* Used to store offsets of thread and context static fields */
+ GHashTable *special_static_fields;
+ GHashTable *jump_target_hash;
+ MonoGHashTable *class_init_trampoline_hash;
+ /*
+ * This must be a GHashTable, since these objects can't be finalized
+ * if the hashtable contains a GC visible reference to them.
+ */
+ GHashTable *finalizable_objects_hash;
};
/* This is a copy of System.AppDomain */
#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_cleanup (MonoDomain *domain);
+void
+mono_runtime_install_cleanup (MonoDomainFunc func);
+
+void
+mono_runtime_quit (void);
+
+gboolean
+mono_runtime_is_shutting_down (void);
+
+const char*
+mono_check_corlib_version (void);
+
MonoDomain *
mono_domain_create (void);
inline MonoDomain *
mono_domain_get_by_id (gint32 domainid);
+inline gboolean
+mono_domain_set (MonoDomain *domain, gboolean force);
+
inline void
-mono_domain_set (MonoDomain *domain);
+mono_domain_set_internal (MonoDomain *domain);
+
+gboolean
+mono_domain_is_unloading (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);
+gboolean
+mono_domain_finalize (MonoDomain *domain, guint32 timeout);
void
-mono_domain_unload (MonoDomain *domain, gboolean force);
+mono_domain_free (MonoDomain *domain, gboolean force);
gboolean
mono_domain_has_type_resolve (MonoDomain *domain);
ves_icall_System_AppDomain_GetData (MonoAppDomain *ad,
MonoString *name);
+MonoReflectionAssembly *
+ves_icall_System_AppDomain_LoadAssemblyRaw (MonoAppDomain *ad,
+ MonoArray *raw_assembly,
+ MonoArray *raw_symbol_store,
+ MonoObject *evidence);
+
void
ves_icall_System_AppDomain_SetData (MonoAppDomain *ad,
MonoString *name,
MonoReflectionAssembly *
ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad,
- MonoReflectionAssemblyName *assRef,
+ MonoString *assRef,
MonoObject *evidence);
+gboolean
+ves_icall_System_AppDomain_InternalIsFinalizingForUnload (gint32 domain_id);
+
void
ves_icall_System_AppDomain_InternalUnload (gint32 domain_id);
MonoAppDomain *
ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid);
+void
+ves_icall_System_AppDomain_InternalPushDomainRef (MonoAppDomain *ad);
+
+void
+ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id);
+
+void
+ves_icall_System_AppDomain_InternalPopDomainRef (void);
+
MonoAppContext *
ves_icall_System_AppDomain_InternalGetContext (void);
gint32
ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad);
+MonoString *
+ves_icall_System_AppDomain_InternalGetProcessGuid (MonoString* newguid);
+
+
#endif /* _MONO_METADATA_APPDOMAIN_H_ */