Merge pull request #3106 from lambdageek/dev/monoerror-unhandled
[mono.git] / mono / metadata / coree.c
index 7c4be6afe7e53d6a0ad02785d62c337849036108..4436229376e10101b1d16f827601c72f466d2328 100644 (file)
@@ -5,6 +5,7 @@
  *   Kornel Pal <http://www.kornelpal.hu/>
  *
  * Copyright (C) 2008 Kornel Pal
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
  */
 
 #include <config.h>
@@ -22,6 +23,7 @@
 #include "domain-internals.h"
 #include "appdomain.h"
 #include "object.h"
+#include "object-internals.h"
 #include "loader.h"
 #include "threads.h"
 #include "environment.h"
@@ -143,7 +145,7 @@ __int32 STDMETHODCALLTYPE _CorExeMain(void)
        MonoMethod* method;
        guint32 entry;
        gchar* file_name;
-       gchar* error;
+       gchar* corlib_version_error;
        int argc;
        gunichar2** argvw;
        gchar** argv;
@@ -153,9 +155,9 @@ __int32 STDMETHODCALLTYPE _CorExeMain(void)
        init_from_coree = TRUE;
        domain = mono_runtime_load (file_name, NULL);
 
-       error = (gchar*) mono_check_corlib_version ();
-       if (error) {
-               g_free (error);
+       corlib_version_error = (gchar*) mono_check_corlib_version ();
+       if (corlib_version_error) {
+               g_free (corlib_version_error);
                g_free (file_name);
                MessageBox (NULL, L"Corlib not in sync with this runtime.", NULL, MB_ICONERROR);
                mono_runtime_quit ();
@@ -196,7 +198,8 @@ __int32 STDMETHODCALLTYPE _CorExeMain(void)
                argv [i] = g_utf16_to_utf8 (argvw [i], -1, NULL, NULL, NULL);
        LocalFree (argvw);
 
-       mono_runtime_run_main (method, argc, argv, NULL);
+       mono_runtime_run_main_checked (method, argc, argv, &error);
+       mono_error_raise_exception (&error); /* OK, triggers unhandled exn handler */
        mono_thread_manage ();
 
        mono_runtime_quit ();