Browse Source

Merge pull request #28161 from neikeq/exception-hook-no-abort

Mono: Use exit(status) instead of abort() in exception hook
Ignacio Roldán Etcheverry 6 years ago
parent
commit
392f1491e1

+ 4 - 1
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();
 }
 

+ 2 - 1
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();
 }
 

+ 0 - 5
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();
 }