X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini.c;h=99b51050f1fd14ae5b5dc74f070147395b31543c;hb=3ca530a8bdedfb8d1c50585a5e8a7bb8f3d7b5ea;hp=599c3a96eb1a9fcac84df03d6698a177a50ba257;hpb=4f678b2ab065d913eb4e53980069da0fa5226f43;p=mono.git diff --git a/mono/mini/mini.c b/mono/mini/mini.c index 599c3a96eb1..99b51050f1f 100644 --- a/mono/mini/mini.c +++ b/mono/mini/mini.c @@ -2984,8 +2984,7 @@ mono_insert_safepoints (MonoCompile *cfg) if (info && info->subtype == WRAPPER_SUBTYPE_ICALL_WRAPPER && (info->d.icall.func == mono_thread_interruption_checkpoint || - info->d.icall.func == mono_threads_finish_blocking || - info->d.icall.func == mono_threads_reset_blocking_start)) { + info->d.icall.func == mono_threads_exit_gc_safe_region_unbalanced)) { /* These wrappers are called from the wrapper for the polling function, leading to potential stack overflow */ if (cfg->verbose_level > 1) printf ("SKIPPING SAFEPOINTS for wrapper %s\n", cfg->method->name); @@ -4068,7 +4067,9 @@ mono_jit_compile_method_inner (MonoMethod *method, MonoDomain *target_domain, in mono_lookup_pinvoke_call (method, NULL, NULL); } nm = mono_marshal_get_native_wrapper (method, TRUE, mono_aot_only); - code = mono_get_addr_from_ftnptr (mono_compile_method (nm)); + gpointer compiled_method = mono_compile_method_checked (nm, error); + return_val_if_nok (error, NULL); + code = mono_get_addr_from_ftnptr (compiled_method); jinfo = mono_jit_info_table_find (target_domain, (char *)code); if (!jinfo) jinfo = mono_jit_info_table_find (mono_domain_get (), (char *)code); @@ -4098,15 +4099,21 @@ mono_jit_compile_method_inner (MonoMethod *method, MonoDomain *target_domain, in } else if (*name == 'I' && (strcmp (name, "Invoke") == 0)) { if (mono_llvm_only) { nm = mono_marshal_get_delegate_invoke (method, NULL); - return mono_get_addr_from_ftnptr (mono_compile_method (nm)); + gpointer compiled_ptr = mono_compile_method_checked (nm, error); + mono_error_assert_ok (error); + return mono_get_addr_from_ftnptr (compiled_ptr); } return mono_create_delegate_trampoline (target_domain, method->klass); } else if (*name == 'B' && (strcmp (name, "BeginInvoke") == 0)) { nm = mono_marshal_get_delegate_begin_invoke (method); - return mono_get_addr_from_ftnptr (mono_compile_method (nm)); + gpointer compiled_ptr = mono_compile_method_checked (nm, error); + mono_error_assert_ok (error); + return mono_get_addr_from_ftnptr (compiled_ptr); } else if (*name == 'E' && (strcmp (name, "EndInvoke") == 0)) { nm = mono_marshal_get_delegate_end_invoke (method); - return mono_get_addr_from_ftnptr (mono_compile_method (nm)); + gpointer compiled_ptr = mono_compile_method_checked (nm, error); + mono_error_assert_ok (error); + return mono_get_addr_from_ftnptr (compiled_ptr); } }