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>
This commit is contained in:
parent
227c47e7a0
commit
d10f2c0723
|
@ -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);
|
||||||
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)
|
||||||
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;
|
||||||
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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue