Module: wine Branch: master Commit: d10f2c0723585da66a7b1e822e852ce54d56c5f1 URL: https://source.winehq.org/git/wine.git/?a=commit;h=d10f2c0723585da66a7b1e822...
Author: Vincent Povirk vincent@codeweavers.com Date: Thu Oct 24 16:00:52 2019 -0500
mscoree: Call mono_thread_manage in GC Unsafe mode.
The mono_thread_manage API expects to be called in GC Unsafe mode.
This has been the case for a while, but for some reason it only caused problems in the Mono merge I'm working on now.
We don't need a matching exit call because we're shutting down the runtime anyway, and we can't change GC modes after the runtime shuts down.
Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mscoree/corruntimehost.c | 2 ++ dlls/mscoree/metahost.c | 2 ++ dlls/mscoree/mscoree_private.h | 1 + 3 files changed, 5 insertions(+)
diff --git a/dlls/mscoree/corruntimehost.c b/dlls/mscoree/corruntimehost.c index e932a7f58b..b72af709c0 100644 --- a/dlls/mscoree/corruntimehost.c +++ b/dlls/mscoree/corruntimehost.c @@ -1544,6 +1544,8 @@ __int32 WINAPI _CorExeMain(void)
if (domain) { + int dummy; + mono_threads_enter_gc_unsafe_region(&dummy); mono_thread_manage(); mono_runtime_quit(); } diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c index 18232a4568..575d6ce1d3 100644 --- a/dlls/mscoree/metahost.c +++ b/dlls/mscoree/metahost.c @@ -124,6 +124,7 @@ MonoString* (CDECL *mono_string_new)(MonoDomain *domain, const char *str); static char* (CDECL *mono_stringify_assembly_name)(MonoAssemblyName *aname); MonoThread* (CDECL *mono_thread_attach)(MonoDomain *domain); void (CDECL *mono_thread_manage)(void); +void (CDECL *mono_threads_enter_gc_unsafe_region)(void *stackdata); void (CDECL *mono_trace_set_print_handler)(MonoPrintCallback callback); void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback);
@@ -224,6 +225,7 @@ static HRESULT load_mono(LPCWSTR mono_path) LOAD_MONO_FUNCTION(mono_string_new); LOAD_MONO_FUNCTION(mono_thread_attach); LOAD_MONO_FUNCTION(mono_thread_manage); + LOAD_MONO_FUNCTION(mono_threads_enter_gc_unsafe_region);
#undef LOAD_MONO_FUNCTION
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h index 2b9c1dd35e..250bd24ad1 100644 --- a/dlls/mscoree/mscoree_private.h +++ b/dlls/mscoree/mscoree_private.h @@ -177,6 +177,7 @@ extern void (CDECL *mono_runtime_quit)(void) DECLSPEC_HIDDEN; extern MonoString* (CDECL *mono_string_new)(MonoDomain *domain, const char *str) DECLSPEC_HIDDEN; extern MonoThread* (CDECL *mono_thread_attach)(MonoDomain *domain) DECLSPEC_HIDDEN; extern void (CDECL *mono_thread_manage)(void) DECLSPEC_HIDDEN; +extern void (CDECL *mono_threads_enter_gc_unsafe_region)(void *stackdata) DECLSPEC_HIDDEN; extern void (CDECL *mono_trace_set_print_handler)(MonoPrintCallback callback) DECLSPEC_HIDDEN; extern void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback) DECLSPEC_HIDDEN;