projects
/
mono.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #3106 from lambdageek/dev/monoerror-unhandled
[mono.git]
/
mono
/
metadata
/
coree.c
diff --git
a/mono/metadata/coree.c
b/mono/metadata/coree.c
index d722271ebb7da3937db68b81cf767ddcd844df9e..4436229376e10101b1d16f827601c72f466d2328 100644
(file)
--- a/
mono/metadata/coree.c
+++ b/
mono/metadata/coree.c
@@
-5,6
+5,7
@@
* Kornel Pal <http://www.kornelpal.hu/>
*
* Copyright (C) 2008 Kornel Pal
* 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>
*/
#include <config.h>
@@
-22,6
+23,7
@@
#include "domain-internals.h"
#include "appdomain.h"
#include "object.h"
#include "domain-internals.h"
#include "appdomain.h"
#include "object.h"
+#include "object-internals.h"
#include "loader.h"
#include "threads.h"
#include "environment.h"
#include "loader.h"
#include "threads.h"
#include "environment.h"
@@
-136,13
+138,14
@@
BOOL STDMETHODCALLTYPE _CorDllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpRes
/* Called by ntdll.dll reagardless of entry point after _CorValidateImage. */
__int32 STDMETHODCALLTYPE _CorExeMain(void)
{
/* Called by ntdll.dll reagardless of entry point after _CorValidateImage. */
__int32 STDMETHODCALLTYPE _CorExeMain(void)
{
+ MonoError error;
MonoDomain* domain;
MonoAssembly* assembly;
MonoImage* image;
MonoMethod* method;
guint32 entry;
gchar* file_name;
MonoDomain* domain;
MonoAssembly* assembly;
MonoImage* image;
MonoMethod* method;
guint32 entry;
gchar* file_name;
- gchar* error;
+ gchar*
corlib_version_
error;
int argc;
gunichar2** argvw;
gchar** argv;
int argc;
gunichar2** argvw;
gchar** argv;
@@
-152,9
+155,9
@@
__int32 STDMETHODCALLTYPE _CorExeMain(void)
init_from_coree = TRUE;
domain = mono_runtime_load (file_name, NULL);
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 ();
g_free (file_name);
MessageBox (NULL, L"Corlib not in sync with this runtime.", NULL, MB_ICONERROR);
mono_runtime_quit ();
@@
-179,9
+182,10
@@
__int32 STDMETHODCALLTYPE _CorExeMain(void)
ExitProcess (1);
}
ExitProcess (1);
}
- method = mono_get_method
(image, entry, NULL
);
+ method = mono_get_method
_checked (image, entry, NULL, NULL, &error
);
if (method == NULL) {
g_free (file_name);
if (method == NULL) {
g_free (file_name);
+ mono_error_cleanup (&error); /* FIXME don't swallow the error */
MessageBox (NULL, L"The entry point method could not be loaded.", NULL, MB_ICONERROR);
mono_runtime_quit ();
ExitProcess (1);
MessageBox (NULL, L"The entry point method could not be loaded.", NULL, MB_ICONERROR);
mono_runtime_quit ();
ExitProcess (1);
@@
-194,7
+198,8
@@
__int32 STDMETHODCALLTYPE _CorExeMain(void)
argv [i] = g_utf16_to_utf8 (argvw [i], -1, NULL, NULL, NULL);
LocalFree (argvw);
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 ();
mono_thread_manage ();
mono_runtime_quit ();