Mono: Make sure editor thread is attached on script reload

This commit is contained in:
Ignacio Etcheverry 2017-10-07 00:43:02 +02:00
parent 1d309439cb
commit fdc3de009c

View file

@ -1795,6 +1795,31 @@ RES ResourceFormatLoaderCSharpScript::load(const String &p_path, const String &p
#endif #endif
script->set_path(p_original_path); script->set_path(p_original_path);
#ifndef TOOLS_ENABLED
#ifdef DEBUG_ENABLED
// User is responsible for thread attach/detach
ERR_EXPLAIN("Thread is not attached");
CRASH_COND(mono_domain_get() == NULL);
#endif
#else
if (Engine::get_singleton()->is_editor_hint() && mono_domain_get() == NULL) {
CRASH_COND(Thread::get_caller_id() == Thread::get_main_id());
// Thread is not attached, but we will make an exception in this case
// because this may be called by one of the editor's worker threads.
// Attach this thread temporarily to reload the script.
MonoThread *mono_thread = mono_thread_attach(SCRIPTS_DOMAIN);
CRASH_COND(mono_thread == NULL);
script->reload();
mono_thread_detach(mono_thread);
} else // just reload it normally
#endif
script->reload(); script->reload();
if (r_error) if (r_error)