summaryrefslogtreecommitdiffstats
path: root/base/process
diff options
context:
space:
mode:
authorscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-03 01:34:36 +0000
committerscottmg@chromium.org <scottmg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-03 01:34:36 +0000
commit40708a0caaa1e808e0d7287b641b7252aeaa0c7d (patch)
tree320b6ac1bfe76ff58196e55103c9907fa4804e76 /base/process
parent516adaa6d4088f2f3deea2a921bb3222415a5863 (diff)
downloadchromium_src-40708a0caaa1e808e0d7287b641b7252aeaa0c7d.zip
chromium_src-40708a0caaa1e808e0d7287b641b7252aeaa0c7d.tar.gz
chromium_src-40708a0caaa1e808e0d7287b641b7252aeaa0c7d.tar.bz2
Fix --enable-logging after VS2013 switch
After https://src.chromium.org/viewvc/chrome?view=rev&revision=178656 a valid fileno of stdout or stderr abort connection of the console to stdio on Windows. Looking at the VS CRT between 2010 and 2013, it seems the behavior that r178656 was relying on changed: (in __initstdio) C:\Program Files (x86)>diff "Microsoft Visual Studio 10.0\vc\crt\src\_file.c" "Microsoft Visual Studio 12.0\vc\crt\src\_file.c" 144,157d143 < for ( i = 0 ; i < 3 ; i++ ) { < if ( (_osfhnd(i) == (intptr_t)INVALID_HANDLE_VALUE) || < (_osfhnd(i) == _NO_CONSOLE_FILENO) || < (_osfhnd(i) == 0) ) < { < /* < * For stdin, stdout & stderr, we use _NO_CONSOLE_FILENO (a value < * different from _INVALID_HANDLE_VALUE to distinguish between < * a failure in opening a file & a program run without a console. < */ < _iob[i]._file = _NO_CONSOLE_FILENO; < } < } < 194a181 > __piob = NULL; There's an open bug http://connect.microsoft.com/VisualStudio/feedback/details/785119/ but as it was broken in 2012 and not fixed in 2013, it doesn't look like it's going to be fixed. (The documentation still suggests that r178656 is correct: http://msdn.microsoft.com/en-us/library/zs6wbdhx(v=vs.100).aspx vs http://msdn.microsoft.com/en-us/library/zs6wbdhx(v=vs.120).aspx ) but that's little consolation. So, confirm that the underlying HANDLE is valid before aborting. TBR=brettw@chromium.org R=mseaborn@chromium.org BUG=169941, 309197, 358267 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=260738 Review URL: https://codereview.chromium.org/219813003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@261253 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process')
-rw-r--r--base/process/launch_win.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/base/process/launch_win.cc b/base/process/launch_win.cc
index de05255..edb523b 100644
--- a/base/process/launch_win.cc
+++ b/base/process/launch_win.cc
@@ -63,8 +63,22 @@ void RouteStdioToConsole() {
// stdout/stderr on startup (before the handle IDs can be reused).
// _fileno(stdout) will return -2 (_NO_CONSOLE_FILENO) if stdout was
// invalid.
- if (_fileno(stdout) >= 0 || _fileno(stderr) >= 0)
- return;
+ if (_fileno(stdout) >= 0 || _fileno(stderr) >= 0) {
+ // _fileno was broken for SUBSYSTEM:WINDOWS from VS2010 to VS2012/2013.
+ // http://crbug.com/358267. Confirm that the underlying HANDLE is valid
+ // before aborting.
+
+ // This causes NaCl tests to hang on XP for reasons unclear, perhaps due
+ // to not being able to inherit handles. Since it's only for debugging,
+ // and redirecting still works, punt for now.
+ if (base::win::GetVersion() < base::win::VERSION_VISTA)
+ return;
+
+ intptr_t stdout_handle = _get_osfhandle(_fileno(stdout));
+ intptr_t stderr_handle = _get_osfhandle(_fileno(stderr));
+ if (stdout_handle >= 0 || stderr_handle >= 0)
+ return;
+ }
if (!AttachConsole(ATTACH_PARENT_PROCESS)) {
unsigned int result = GetLastError();