Mon Apr 8 17:17:04 CEST 2002 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Mon, 8 Apr 2002 11:28:27 +0000 (11:28 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Mon, 8 Apr 2002 11:28:27 +0000 (11:28 -0000)
* appdomain.h, appdomain.c: split initialization that requires the
execution engine support into mono_runtime_init().

svn path=/trunk/mono/; revision=3687

mono/metadata/ChangeLog
mono/metadata/appdomain.c
mono/metadata/appdomain.h

index 194d71da19869defef16b3d62abbb42385bc2858..376f74685edc9d81916f17d55e810ac746374be5 100644 (file)
@@ -1,3 +1,9 @@
+
+Mon Apr 8 17:17:04 CEST 2002 Paolo Molaro <lupus@ximian.com>
+
+       * appdomain.h, appdomain.c: split initialization that requires the
+       execution engine support into mono_runtime_init().
+
 2002-04-08  Dietmar Maurer  <dietmar@ximian.com>
 
        * class.c (mono_class_init): don't include vtable inside MonoClass
 2002-04-08  Dietmar Maurer  <dietmar@ximian.com>
 
        * class.c (mono_class_init): don't include vtable inside MonoClass
index 1c3a25ecf0f5e1bedec50e5c5445b87b5d7f8f7e..9c570635804b520c562acaa78bf0451b0c393733 100644 (file)
@@ -161,6 +161,7 @@ MonoDomain *mono_root_domain = NULL;
  * 
  * Creates the initial application domain and initializes the mono_defaults
  * structure.
  * 
  * Creates the initial application domain and initializes the mono_defaults
  * structure.
+ * This function is guaranteed to not run any IL code.
  *
  * Returns: the initial domain.
  */
  *
  * Returns: the initial domain.
  */
@@ -168,11 +169,7 @@ MonoDomain *
 mono_init (const char *filename)
 {
        static MonoDomain *domain = NULL;
 mono_init (const char *filename)
 {
        static MonoDomain *domain = NULL;
-       MonoAppDomainSetup *setup;
-       MonoAppDomain *ad;
        MonoAssembly *ass;
        MonoAssembly *ass;
-       MonoClass *class;
-       MonoString *name;
        MonoImageOpenStatus status = MONO_IMAGE_OK;
 
        if (domain)
        MonoImageOpenStatus status = MONO_IMAGE_OK;
 
        if (domain)
@@ -332,20 +329,37 @@ mono_init (const char *filename)
                 mono_defaults.corlib, "System.Runtime.Remoting.Messaging", "MonoMethodMessage");
        g_assert (mono_defaults.mono_method_message_class != 0);
 
                 mono_defaults.corlib, "System.Runtime.Remoting.Messaging", "MonoMethodMessage");
        g_assert (mono_defaults.mono_method_message_class != 0);
 
+       domain->friendly_name = g_path_get_basename (filename);
+
+       return domain;
+}
+
+/*
+ * mono_runtime_init:
+ * @domain: domain returned by mono_init ()
+ *
+ * Initialize the core AppDomain: this function will run also some
+ * IL initialization code, so it needs the execution engine to be fully 
+ * operational.
+ */
+void
+mono_runtime_init (MonoDomain *domain)
+{
+       MonoAppDomainSetup *setup;
+       MonoAppDomain *ad;
+       MonoClass *class;
+       
        class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomainSetup");
        setup = (MonoAppDomainSetup *) mono_object_new (domain, class);
        ves_icall_System_AppDomainSetup_InitAppDomainSetup (setup);
 
        class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomainSetup");
        setup = (MonoAppDomainSetup *) mono_object_new (domain, class);
        ves_icall_System_AppDomainSetup_InitAppDomainSetup (setup);
 
-       name = mono_string_new (domain, g_path_get_basename (filename));
-
        class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomain");
        ad = (MonoAppDomain *) mono_object_new (domain, class);
        ad->data = domain;
        domain->domain = ad;
        domain->setup = setup;
        class = mono_class_from_name (mono_defaults.corlib, "System", "AppDomain");
        ad = (MonoAppDomain *) mono_object_new (domain, class);
        ad->data = domain;
        domain->domain = ad;
        domain->setup = setup;
-       domain->friendly_name = name;
 
 
-       return domain;
+       return;
 }
 
 void
 }
 
 void
@@ -492,7 +506,7 @@ ves_icall_System_AppDomain_getFriendlyName (MonoAppDomain *ad)
        g_assert (ad != NULL);
        g_assert (ad->data != NULL);
 
        g_assert (ad != NULL);
        g_assert (ad->data != NULL);
 
-       return ad->data->friendly_name;
+       return mono_string_new (ad->data, ad->data->friendly_name);
 }
 
 /**
 }
 
 /**
@@ -540,7 +554,7 @@ ves_icall_System_AppDomain_createDomain (MonoString *friendly_name, MonoAppDomai
        ad->data = data = mono_create_domain ();
        data->domain = ad;
        data->setup = setup;
        ad->data = data = mono_create_domain ();
        data->domain = ad;
        data->setup = setup;
-       data->friendly_name = friendly_name;
+       data->friendly_name = mono_string_to_utf8 (friendly_name);
 
        // fixme: what to do next ?
 
 
        // fixme: what to do next ?
 
@@ -664,6 +678,7 @@ mono_domain_unload (MonoDomain *domain, gboolean force)
                return;
        }
 
                return;
        }
 
+       g_free (domain->friendly_name);
        g_hash_table_foreach (domain->assemblies, remove_assembly, NULL);
 
        g_hash_table_destroy (domain->env);
        g_hash_table_foreach (domain->assemblies, remove_assembly, NULL);
 
        g_hash_table_destroy (domain->env);
index a0eee6830a1326fe5bbe166db0f0e4d629099841..03abf0160004b0cdfca38655d06f8a86b53b2fa9 100644 (file)
@@ -61,7 +61,7 @@ struct _MonoDomain {
        GHashTable         *env;
        GHashTable         *assemblies;
        MonoAppDomainSetup *setup;
        GHashTable         *env;
        GHashTable         *assemblies;
        MonoAppDomainSetup *setup;
-       MonoString         *friendly_name;
+       char*              *friendly_name;
        MonoGHashTable     *ldstr_table;
        MonoGHashTable     *class_vtable_hash;
        MonoGHashTable     *proxy_vtable_hash;
        MonoGHashTable     *ldstr_table;
        MonoGHashTable     *class_vtable_hash;
        MonoGHashTable     *proxy_vtable_hash;
@@ -77,9 +77,12 @@ struct _MonoAppDomain {
 
 extern MonoDomain *mono_root_domain;
 
 
 extern MonoDomain *mono_root_domain;
 
-MonoDomain *
+MonoDomain*
 mono_init                  (const char *filename);
 
 mono_init                  (const char *filename);
 
+void
+mono_runtime_init          (MonoDomain *domain);
+
 inline MonoDomain *
 mono_domain_get            (void);
 
 inline MonoDomain *
 mono_domain_get            (void);