+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
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.
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)
{
}
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;
#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;
#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;