Commit d10f2c07 authored by Vincent Povirk's avatar Vincent Povirk Committed by Alexandre Julliard

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: 's avatarVincent Povirk <vincent@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 227c47e7
...@@ -1544,6 +1544,8 @@ __int32 WINAPI _CorExeMain(void) ...@@ -1544,6 +1544,8 @@ __int32 WINAPI _CorExeMain(void)
if (domain) if (domain)
{ {
int dummy;
mono_threads_enter_gc_unsafe_region(&dummy);
mono_thread_manage(); mono_thread_manage();
mono_runtime_quit(); mono_runtime_quit();
} }
......
...@@ -124,6 +124,7 @@ MonoString* (CDECL *mono_string_new)(MonoDomain *domain, const char *str); ...@@ -124,6 +124,7 @@ MonoString* (CDECL *mono_string_new)(MonoDomain *domain, const char *str);
static char* (CDECL *mono_stringify_assembly_name)(MonoAssemblyName *aname); static char* (CDECL *mono_stringify_assembly_name)(MonoAssemblyName *aname);
MonoThread* (CDECL *mono_thread_attach)(MonoDomain *domain); MonoThread* (CDECL *mono_thread_attach)(MonoDomain *domain);
void (CDECL *mono_thread_manage)(void); 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_print_handler)(MonoPrintCallback callback);
void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback); void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback);
...@@ -224,6 +225,7 @@ static HRESULT load_mono(LPCWSTR mono_path) ...@@ -224,6 +225,7 @@ static HRESULT load_mono(LPCWSTR mono_path)
LOAD_MONO_FUNCTION(mono_string_new); LOAD_MONO_FUNCTION(mono_string_new);
LOAD_MONO_FUNCTION(mono_thread_attach); LOAD_MONO_FUNCTION(mono_thread_attach);
LOAD_MONO_FUNCTION(mono_thread_manage); LOAD_MONO_FUNCTION(mono_thread_manage);
LOAD_MONO_FUNCTION(mono_threads_enter_gc_unsafe_region);
#undef LOAD_MONO_FUNCTION #undef LOAD_MONO_FUNCTION
......
...@@ -177,6 +177,7 @@ extern void (CDECL *mono_runtime_quit)(void) DECLSPEC_HIDDEN; ...@@ -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 MonoString* (CDECL *mono_string_new)(MonoDomain *domain, const char *str) DECLSPEC_HIDDEN;
extern MonoThread* (CDECL *mono_thread_attach)(MonoDomain *domain) 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_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_print_handler)(MonoPrintCallback callback) DECLSPEC_HIDDEN;
extern void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback) DECLSPEC_HIDDEN; extern void (CDECL *mono_trace_set_printerr_handler)(MonoPrintCallback callback) DECLSPEC_HIDDEN;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment