| Index: base/process/launch_win.cc
|
| diff --git a/base/process/launch_win.cc b/base/process/launch_win.cc
|
| index fa59f1ae90744469e397d3bd778cb8b1e98150c4..b91320364d6b8e248d3e8f03a242d65ccef0b77b 100644
|
| --- a/base/process/launch_win.cc
|
| +++ b/base/process/launch_win.cc
|
| @@ -64,8 +64,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();
|
|
|