diff options
author | Ignacio Roldán Etcheverry <neikeq@users.noreply.github.com> | 2019-04-18 16:26:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-18 16:26:54 +0200 |
commit | 392f1491e1116ea582b32ee813de3fd792f6abfb (patch) | |
tree | ce04419dbd1fc226d6424bf730979235c59ec49d | |
parent | 1b3ea697c5dcbbb2feb0f96204de257532edaf0c (diff) | |
parent | 8759c0e31a21d9f98ac24ac4c88fa86bd72ff68f (diff) | |
download | redot-engine-392f1491e1116ea582b32ee813de3fd792f6abfb.tar.gz |
Merge pull request #28161 from neikeq/exception-hook-no-abort
Mono: Use exit(status) instead of abort() in exception hook
-rw-r--r-- | modules/mono/mono_gd/gd_mono.cpp | 5 | ||||
-rw-r--r-- | modules/mono/mono_gd/gd_mono_internals.cpp | 3 | ||||
-rw-r--r-- | modules/mono/mono_gd/gd_mono_utils.cpp | 5 |
3 files changed, 6 insertions, 7 deletions
diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp index 48bea4addf..bfb6c13224 100644 --- a/modules/mono/mono_gd/gd_mono.cpp +++ b/modules/mono/mono_gd/gd_mono.cpp @@ -30,6 +30,7 @@ #include "gd_mono.h" +#include <mono/metadata/environment.h> #include <mono/metadata/exception.h> #include <mono/metadata/mono-config.h> #include <mono/metadata/mono-debug.h> @@ -1008,7 +1009,9 @@ void GDMono::unhandled_exception_hook(MonoObject *p_exc, void *) { if (ScriptDebugger::get_singleton()) ScriptDebugger::get_singleton()->idle_poll(); #endif - abort(); + + exit(mono_environment_exitcode_get()); + GD_UNREACHABLE(); } diff --git a/modules/mono/mono_gd/gd_mono_internals.cpp b/modules/mono/mono_gd/gd_mono_internals.cpp index c8cba5cf1b..63bcfe053c 100644 --- a/modules/mono/mono_gd/gd_mono_internals.cpp +++ b/modules/mono/mono_gd/gd_mono_internals.cpp @@ -111,7 +111,8 @@ void tie_managed_to_unmanaged(MonoObject *managed, Object *unmanaged) { void unhandled_exception(MonoException *p_exc) { mono_unhandled_exception((MonoObject *)p_exc); // prints the exception as well - abort(); + // Too bad 'mono_invoke_unhandled_exception_hook' is not exposed to embedders + GDMono::unhandled_exception_hook((MonoObject *)p_exc, NULL); GD_UNREACHABLE(); } diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp index 429d4f68d9..bcf5712d16 100644 --- a/modules/mono/mono_gd/gd_mono_utils.cpp +++ b/modules/mono/mono_gd/gd_mono_utils.cpp @@ -632,11 +632,6 @@ void debug_send_unhandled_exception_error(MonoException *p_exc) { } void debug_unhandled_exception(MonoException *p_exc) { -#ifdef DEBUG_ENABLED - GDMonoUtils::debug_send_unhandled_exception_error(p_exc); - if (ScriptDebugger::get_singleton()) - ScriptDebugger::get_singleton()->idle_poll(); -#endif GDMonoInternals::unhandled_exception(p_exc); // prints the exception as well GD_UNREACHABLE(); } |