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

Reply via email to