[reflection] MonoError for mono_reflection_type_get_handle
[mono.git] / mono / metadata / console-unix.c
index dd64b249703eb62873c90b21d8af5697f375ccc8..fe59f700ea987d7a621daff20544b7808ec62acd 100644 (file)
@@ -31,9 +31,9 @@
 #include <mono/metadata/object-internals.h>
 #include <mono/metadata/class-internals.h>
 #include <mono/metadata/domain-internals.h>
-#include <mono/metadata/gc-internal.h>
+#include <mono/metadata/gc-internals.h>
 #include <mono/metadata/metadata.h>
-#include <mono/metadata/threadpool.h>
+#include <mono/metadata/threadpool-ms.h>
 #include <mono/utils/mono-signal-handler.h>
 #include <mono/utils/mono-proclib.h>
 
@@ -221,6 +221,7 @@ static void
 do_console_cancel_event (void)
 {
        static MonoClassField *cancel_handler_field;
+       MonoError error;
        MonoDomain *domain = mono_domain_get ();
        MonoClass *klass;
        MonoDelegate *load_value;
@@ -231,7 +232,7 @@ do_console_cancel_event (void)
        if (!domain->domain)
                return;
 
-       klass = mono_class_from_name (mono_defaults.corlib, "System", "Console");
+       klass = mono_class_try_load_from_name (mono_defaults.corlib, "System", "Console");
        if (klass == NULL)
                return;
 
@@ -240,9 +241,11 @@ do_console_cancel_event (void)
                g_assert (cancel_handler_field);
        }
 
-       vtable = mono_class_vtable_full (domain, klass, FALSE);
-       if (vtable == NULL)
+       vtable = mono_class_vtable_full (domain, klass, &error);
+       if (vtable == NULL || !is_ok (&error)) {
+               mono_error_cleanup (&error);
                return;
+       }
        mono_field_static_get_value (vtable, cancel_handler_field, &load_value);
        if (load_value == NULL)
                return;
@@ -251,7 +254,7 @@ do_console_cancel_event (void)
        method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
        g_assert (method != NULL);
 
-       mono_thread_pool_begin_invoke (domain, (MonoObject*) load_value, method, NULL);
+       mono_threadpool_ms_begin_invoke (domain, (MonoObject*) load_value, method, NULL);
 }
 
 static int need_cancel = FALSE;
@@ -336,6 +339,7 @@ MONO_SIG_HANDLER_FUNC (static, sigwinch_handler)
 static void
 console_set_signal_handlers ()
 {
+#if defined(HAVE_SIGACTION)
        struct sigaction sigcont, sigint, sigwinch;
 
        memset (&sigcont, 0, sizeof (struct sigaction));
@@ -343,22 +347,23 @@ console_set_signal_handlers ()
        memset (&sigwinch, 0, sizeof (struct sigaction));
        
        // Continuing
-       sigcont.sa_handler = (void *) sigcont_handler;
-       sigcont.sa_flags = 0;
+       sigcont.sa_handler = (void (*)(int)) sigcont_handler;
+       sigcont.sa_flags = SA_RESTART;
        sigemptyset (&sigcont.sa_mask);
        sigaction (SIGCONT, &sigcont, &save_sigcont);
        
        // Interrupt handler
-       sigint.sa_handler = (void *) sigint_handler;
-       sigint.sa_flags = 0;
+       sigint.sa_handler = (void (*)(int)) sigint_handler;
+       sigint.sa_flags = SA_RESTART;
        sigemptyset (&sigint.sa_mask);
        sigaction (SIGINT, &sigint, &save_sigint);
 
        // Window size changed
-       sigwinch.sa_handler = (void *) sigwinch_handler;
-       sigwinch.sa_flags = 0;
+       sigwinch.sa_handler = (void (*)(int)) sigwinch_handler;
+       sigwinch.sa_flags = SA_RESTART;
        sigemptyset (&sigwinch.sa_mask);
        sigaction (SIGWINCH, &sigwinch, &save_sigwinch);
+#endif
 }
 
 #if currently_unuused