summaryrefslogtreecommitdiffstats
path: root/ipc/chromium/src/base
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-09-04 20:53:31 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-09-04 20:53:31 +0200
commit580084e9e1d0355c96a54a9641df6c1fee894948 (patch)
tree5aff416b5aed2ca9e326054567d837f28c20ed25 /ipc/chromium/src/base
parentfc61780b35af913801d72086456f493f63197da6 (diff)
parentb28ab55f9675f2e97dda9a4fcac0d4f5267a2bb9 (diff)
downloadUXP-580084e9e1d0355c96a54a9641df6c1fee894948.tar
UXP-580084e9e1d0355c96a54a9641df6c1fee894948.tar.gz
UXP-580084e9e1d0355c96a54a9641df6c1fee894948.tar.lz
UXP-580084e9e1d0355c96a54a9641df6c1fee894948.tar.xz
UXP-580084e9e1d0355c96a54a9641df6c1fee894948.zip
Merge branch 'master' into Basilisk-releasev2018.09.05
Diffstat (limited to 'ipc/chromium/src/base')
-rw-r--r--ipc/chromium/src/base/process_util_win.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/ipc/chromium/src/base/process_util_win.cc b/ipc/chromium/src/base/process_util_win.cc
index f22f7216f..fa9b86ace 100644
--- a/ipc/chromium/src/base/process_util_win.cc
+++ b/ipc/chromium/src/base/process_util_win.cc
@@ -298,6 +298,33 @@ bool LaunchApp(const std::wstring& cmdline,
LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList = NULL;
+ // setup our handle array first - if we end up with no handles that can
+ // be inherited we can avoid trying to do the ThreadAttributeList dance...
+ HANDLE handlesToInherit[2];
+ int handleCount = 0;
+ HANDLE stdOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
+ HANDLE stdErr = ::GetStdHandle(STD_ERROR_HANDLE);
+
+ if (IsInheritableHandle(stdOut))
+ handlesToInherit[handleCount++] = stdOut;
+ if (stdErr != stdOut && IsInheritableHandle(stdErr))
+ handlesToInherit[handleCount++] = stdErr;
+
+ if (handleCount) {
+ lpAttributeList = CreateThreadAttributeList(handlesToInherit, handleCount);
+ if (lpAttributeList) {
+ // it's safe to inherit handles, so arrange for that...
+ startup_info.cb = sizeof(startup_info_ex);
+ startup_info.dwFlags |= STARTF_USESTDHANDLES;
+ startup_info.hStdOutput = stdOut;
+ startup_info.hStdError = stdErr;
+ startup_info.hStdInput = INVALID_HANDLE_VALUE;
+ startup_info_ex.lpAttributeList = lpAttributeList;
+ dwCreationFlags |= EXTENDED_STARTUPINFO_PRESENT;
+ bInheritHandles = TRUE;
+ }
+ }
+
PROCESS_INFORMATION process_info;
BOOL createdOK = CreateProcess(NULL,
const_cast<wchar_t*>(cmdline.c_str()), NULL, NULL,