2009-02-18 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 19 Feb 2009 18:07:29 +0000 (18:07 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 19 Feb 2009 18:07:29 +0000 (18:07 -0000)
* domain.c: Add mono_domain_code_* functions that perform locking
around the domain codeman.

* domain-internals.h: Export those functions.

* object.c: Use new functions instead of acquiring the domain lock.

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

mono/metadata/ChangeLog
mono/metadata/domain-internals.h
mono/metadata/domain.c
mono/metadata/object.c

index 90a03c311e136be335107ef35ec9501b6c006d3c..d101961c75bc3a0a61cfefed0074ab6588f917ce 100644 (file)
@@ -1,3 +1,12 @@
+2009-02-18 Rodrigo Kumpera  <rkumpera@novell.com>
+
+       * domain.c: Add mono_domain_code_* functions that perform locking
+       around the domain codeman.
+
+       * domain-internals.h: Export those functions.
+
+       * object.c: Use new functions instead of acquiring the domain lock.
+
 2009-02-19  Zoltan Varga  <vargaz@gmail.com>
 
        * marshal.c (mono_ftnptr_to_delegate): Convert a NULL ftnptr to a null
index 01635fba67b58db4578673499cb519a9d2c895ed..a1a8d001f6d93a07a8291080993d46d07a5b1c86 100644 (file)
@@ -316,6 +316,18 @@ mono_domain_alloc  (MonoDomain *domain, guint size) MONO_INTERNAL;
 gpointer
 mono_domain_alloc0 (MonoDomain *domain, guint size) MONO_INTERNAL;
 
+void*
+mono_domain_code_reserve (MonoDomain *domain, int size) MONO_INTERNAL;
+
+void*
+mono_domain_code_reserve_align (MonoDomain *domain, int size, int alignment) MONO_INTERNAL;
+
+void
+mono_domain_code_commit (MonoDomain *domain, void *data, int size, int newsize) MONO_INTERNAL;
+
+void
+mono_domain_code_foreach (MonoDomain *domain, MonoCodeManagerFunc func, void *user_data) MONO_INTERNAL;
+
 /* 
  * Installs a new function which is used to return a MonoJitInfo for a method inside
  * an AOT module.
index 8c9b7161e936fe059fd641e9ddee257a7f183684..17d0fcb7e4818215d5f28cd04a1bbcb87ac17084 100644 (file)
@@ -1988,6 +1988,68 @@ mono_domain_alloc0 (MonoDomain *domain, guint size)
        return res;
 }
 
+/*
+ * mono_domain_code_reserve:
+ *
+ * LOCKING: Acquires the domain lock.
+ */
+void*
+mono_domain_code_reserve (MonoDomain *domain, int size)
+{
+       gpointer res;
+
+       mono_domain_lock (domain);
+       res = mono_code_manager_reserve (domain->code_mp, size);
+       mono_domain_unlock (domain);
+
+       return res;
+}
+
+/*
+ * mono_domain_code_reserve_align:
+ *
+ * LOCKING: Acquires the domain lock.
+ */
+void*
+mono_domain_code_reserve_align (MonoDomain *domain, int size, int alignment)
+{
+       gpointer res;
+
+       mono_domain_lock (domain);
+       res = mono_code_manager_reserve_align (domain->code_mp, size, alignment);
+       mono_domain_unlock (domain);
+
+       return res;
+}
+
+/*
+ * mono_domain_code_commit:
+ *
+ * LOCKING: Acquires the domain lock.
+ */
+void
+mono_domain_code_commit (MonoDomain *domain, void *data, int size, int newsize)
+{
+       mono_domain_lock (domain);
+       mono_code_manager_commit (domain->code_mp, data, size, newsize);
+       mono_domain_unlock (domain);
+}
+
+/*
+ * mono_domain_code_foreach:
+ *
+ * LOCKING: Acquires the domain lock.
+ */
+
+void
+mono_domain_code_foreach (MonoDomain *domain, MonoCodeManagerFunc func, void *user_data)
+{
+       mono_domain_lock (domain);
+       mono_code_manager_foreach (domain->code_mp, func, user_data);
+       mono_domain_unlock (domain);
+}
+
+
 void 
 mono_context_set (MonoAppContext * new_context)
 {
index 120ab08a8be032466e9a2f97ad7eeb891d1a6afb..6100919269672b37a5f12b6f9aa99c617e943d2d 100644 (file)
@@ -1405,7 +1405,7 @@ mono_method_alloc_generic_virtual_thunk (MonoDomain *domain, int size)
        }
        generic_virtual_thunks_size += size;
 
-       p = mono_code_manager_reserve (domain->code_mp, size);
+       p = mono_domain_code_reserve (domain, size);
        *p = size;
 
        return p + 1;
@@ -5574,9 +5574,7 @@ mono_create_ftnptr (MonoDomain *domain, gpointer addr)
 #ifdef __ia64__
        gpointer *desc;
 
-       mono_domain_lock (domain);
-       desc = mono_code_manager_reserve (domain->code_mp, 2 * sizeof (gpointer));
-       mono_domain_unlock (domain);
+       desc = mono_domain_code_reserve (domain, 2 * sizeof (gpointer));
 
        desc [0] = addr;
        desc [1] = NULL;
@@ -5585,9 +5583,7 @@ mono_create_ftnptr (MonoDomain *domain, gpointer addr)
 #elif defined(__ppc64__) || defined(__powerpc64__)
        gpointer *desc;
 
-       mono_domain_lock (domain);
-       desc = mono_code_manager_reserve (domain->code_mp, 3 * sizeof (gpointer));
-       mono_domain_unlock (domain);
+       desc = mono_domain_code_reserve (domain, 3 * sizeof (gpointer));
 
        desc [0] = addr;
        desc [1] = NULL;