aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-11-26 10:58:06 +0000
committerCorinna Vinschen <corinna@vinschen.de>2009-11-26 10:58:06 +0000
commit7bdbf062cdfe2978f75f80ff803e5e40d783557d (patch)
tree05bc139ae2f62741c9899a8f817ec360c59e89fc
parentb2225216e99b691493d4b6d60f5c696e918af0ca (diff)
downloadnewlib-7bdbf062cdfe2978f75f80ff803e5e40d783557d.zip
newlib-7bdbf062cdfe2978f75f80ff803e5e40d783557d.tar.gz
newlib-7bdbf062cdfe2978f75f80ff803e5e40d783557d.tar.bz2
* dtable.cc (dtable::stdio_init): Use GetCurrentProcess() rather than
hMainProc as process handle when duplicating the stdout handle. Explain why. Add Win32 error code to debug output.
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/dtable.cc10
2 files changed, 13 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 2c94913..923c578 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2009-11-26 Corinna Vinschen <corinna@vinschen.de>
+
+ * dtable.cc (dtable::stdio_init): Use GetCurrentProcess() rather than
+ hMainProc as process handle when duplicating the stdout handle.
+ Explain why. Add Win32 error code to debug output.
+
2009-11-23 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Add
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
index 77055ef..458e73f 100644
--- a/winsup/cygwin/dtable.cc
+++ b/winsup/cygwin/dtable.cc
@@ -177,12 +177,16 @@ dtable::stdio_init ()
{
/* Since this code is not invoked for forked tasks, we don't have
to worry about the close-on-exec flag here. */
- if (!DuplicateHandle (hMainProc, out, hMainProc, &err, 0, true,
- DUPLICATE_SAME_ACCESS))
+ /* CV 2009-11-26: Using hMainProc results in ERROR_INVALID_PARAMETER
+ when trying to duplicate a console handle. It only works using
+ the GetCurrentProcess () pseudo handle for some unknown reason. */
+ if (!DuplicateHandle (GetCurrentProcess (), out,
+ GetCurrentProcess (), &err,
+ 0, TRUE, DUPLICATE_SAME_ACCESS))
{
/* If that fails, do this as a fall back. */
err = out;
- system_printf ("couldn't make stderr distinct from stdout");
+ system_printf ("couldn't make stderr distinct from stdout, %E");
}
}