[threading] The common trampoline must reset the blocking state on entry.
authorRodrigo Kumpera <kumpera@gmail.com>
Mon, 13 Apr 2015 22:49:34 +0000 (18:49 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Mon, 13 Apr 2015 23:05:52 +0000 (19:05 -0400)
mono/mini/mini-trampolines.c

index 7dc0b105666e78a3e6f8f22b59c935f53c5a4634..7e0a6cf3dad0ee8fadece35dd27ed7cffd58762b 100644 (file)
@@ -386,7 +386,7 @@ mini_add_method_trampoline (MonoMethod *orig_method, MonoMethod *m, gpointer com
  * from JITted and LLVM compiled code.
  */
 static gpointer
-common_call_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, guint8* tramp, MonoVTable *vt, gpointer *vtable_slot, gboolean need_rgctx_tramp)
+common_call_trampoline_inner (mgreg_t *regs, guint8 *code, MonoMethod *m, guint8* tramp, MonoVTable *vt, gpointer *vtable_slot, gboolean need_rgctx_tramp)
 {
        gpointer addr, compiled_method;
        gboolean generic_shared = FALSE;
@@ -697,6 +697,16 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, guint8* tram
        return addr;
 }
 
+static gpointer
+common_call_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, guint8* tramp, MonoVTable *vt, gpointer *vtable_slot, gboolean need_rgctx_tramp)
+{
+       gpointer res;
+       MONO_PREPARE_RESET_BLOCKING
+       res = common_call_trampoline_inner (regs, code, m, tramp, vt, vtable_slot, need_rgctx_tramp);
+       MONO_FINISH_RESET_BLOCKING
+       return res;
+}
+
 /**
  * mono_magic_trampoline:
  *