From: Ludovic Henry Date: Mon, 1 Feb 2016 13:11:44 +0000 (+0000) Subject: [coop] Ensure we exit blocking mode when invoking managed code X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=0c0ab39407654f9f41f9e790d85b386bc627c8c3;p=mono.git [coop] Ensure we exit blocking mode when invoking managed code mono_runtime_invoke might be called by P/Invoked code, which is in blocking mode. Not switching back to running can lead to a crash when hitting a safepoint. --- diff --git a/mono/metadata/object.c b/mono/metadata/object.c index 94c29712f16..fb0d0c18798 100644 --- a/mono/metadata/object.c +++ b/mono/metadata/object.c @@ -2904,8 +2904,12 @@ mono_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObject ** if (mono_profiler_get_events () & MONO_PROFILE_METHOD_EVENTS) mono_profiler_method_start_invoke (method); + MONO_PREPARE_RESET_BLOCKING; + result = do_runtime_invoke (method, obj, params, exc); + MONO_FINISH_RESET_BLOCKING; + if (mono_profiler_get_events () & MONO_PROFILE_METHOD_EVENTS) mono_profiler_method_end_invoke (method);