Author: zoltan
Date: 2008-02-03 10:27:13 -0500 (Sun, 03 Feb 2008)
New Revision: 94694
Modified:
branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog
branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
Log:
2008-02-03 Zoltan Varga <[EMAIL PROTECTED]>
* method-to-ir.c (mono_method_to_ir2): Merge the cctor call before
alloc workaround
from mini.c.
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog 2008-02-03
15:10:10 UTC (rev 94693)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/ChangeLog 2008-02-03
15:27:13 UTC (rev 94694)
@@ -1,3 +1,8 @@
+2008-02-03 Zoltan Varga <[EMAIL PROTECTED]>
+
+ * method-to-ir.c (mono_method_to_ir2): Merge the cctor call before
alloc workaround
+ from mini.c.
+
2008-01-26 Zoltan Varga <[EMAIL PROTECTED]>
* mini-sparc.c mini-ia64.c: Fix build.
Modified: branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
===================================================================
--- branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
2008-02-03 15:10:10 UTC (rev 94693)
+++ branches/vargaz/mini-linear-il/mono/mono/mini/method-to-ir.c
2008-02-03 15:27:13 UTC (rev 94694)
@@ -8133,6 +8133,22 @@
* will be transformed into a normal
call there.
*/
} else {
+ MonoVTable *vtable = mono_class_vtable
(cfg->domain, cmethod->klass);
+ /*
+ * TypeInitializationExceptions thrown
from the mono_runtime_class_init
+ * call in mono_jit_runtime_invoke ()
can abort the finalizer thread.
+ * As a workaround, we call class
cctors before allocating objects.
+ */
+ if (mini_field_access_needs_cctor_run
(cfg, method, vtable) && !(g_slist_find (class_inits, vtable))) {
+ guint8 *tramp =
mono_create_class_init_trampoline (vtable);
+ mono_emit_native_call (cfg,
tramp,
+
helper_sig_class_init_trampoline,
+
NULL);
+ if (cfg->verbose_level > 2)
+ printf ("class %s.%s
needs init call for ctor\n", cmethod->klass->name_space, cmethod->klass->name);
+ class_inits = g_slist_prepend
(class_inits, vtable);
+ }
+
alloc = handle_alloc (cfg,
cmethod->klass, FALSE);
*sp = alloc;
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches