From bdeb389f493e2555f2f40bdd35f786ec66c50e4a Mon Sep 17 00:00:00 2001 From: gonzalo Date: Fri, 27 Mar 2009 20:04:49 +0000 Subject: [PATCH] 2009-03-27 Gonzalo Paniagua Javier * appdomain.c: * console-io.[ch]: added new mono_console_init() to make sure that file descriptors 0, 1 and 2 are opened. Bug #489019 fixed. git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mono@130424 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- mono/metadata/ChangeLog | 7 +++++++ mono/metadata/appdomain.c | 4 +++- mono/metadata/console-io.c | 21 +++++++++++++++++++++ mono/metadata/console-io.h | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index 985552191..eb8f53f9a 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -1,3 +1,10 @@ +2009-03-27 Gonzalo Paniagua Javier + + * appdomain.c: + * console-io.[ch]: added new mono_console_init() to make sure that + file descriptors 0, 1 and 2 are opened. + Bug #489019 fixed. + 2009-03-27 Sebastien Pouliot * appdomain.h: Export a new callback type and a new function to diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 4ee2ea25e..6310e03e5 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -236,6 +237,7 @@ mono_runtime_init (MonoDomain *domain, MonoThreadStartCB start_cb, mono_network_init (); #endif + mono_console_init (); mono_attach_init (); mono_locks_tracer_init (); @@ -2106,7 +2108,7 @@ mono_domain_unload (MonoDomain *domain) /* Roll back the state change */ domain->state = MONO_APPDOMAIN_CREATED; - g_warning (thread_data.failure_reason); + g_warning ("%s", thread_data.failure_reason); ex = mono_get_exception_cannot_unload_appdomain (thread_data.failure_reason); diff --git a/mono/metadata/console-io.c b/mono/metadata/console-io.c index 9026892f8..e9206ad59 100644 --- a/mono/metadata/console-io.c +++ b/mono/metadata/console-io.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #ifdef HAVE_SYS_TIME_H @@ -63,6 +64,26 @@ static gchar *keypad_xmit_str; static struct termios mono_attr; #endif +#if defined(PLATFORM_WIN32) +void +mono_console_init (void) +{ +} +#else +void +mono_console_init (void) +{ + int fd; + + /* Make sure the standard file descriptors are opened */ + fd = open ("/dev/null", O_RDWR); + while (fd >= 0 && fd < 3) { + fd = open ("/dev/null", O_RDWR); + } + close (fd); +} +#endif + #if defined (PLATFORM_WIN32) || defined (MONO_NULL_TTYDRIVER) MonoBoolean ves_icall_System_ConsoleDriver_Isatty (HANDLE handle) diff --git a/mono/metadata/console-io.h b/mono/metadata/console-io.h index 5dc6feb5c..e8c8407a9 100644 --- a/mono/metadata/console-io.h +++ b/mono/metadata/console-io.h @@ -18,6 +18,7 @@ G_BEGIN_DECLS +void mono_console_init (void) MONO_INTERNAL; MonoBoolean ves_icall_System_ConsoleDriver_Isatty (HANDLE handle) MONO_INTERNAL; gint32 ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout) MONO_INTERNAL; MonoBoolean ves_icall_System_ConsoleDriver_SetEcho (MonoBoolean echo) MONO_INTERNAL; -- 2.11.4.GIT