Chromium Code Reviews| Index: base/process/launch_win.cc |
| diff --git a/base/process/launch_win.cc b/base/process/launch_win.cc |
| index da913efba749089592644c627c2dc226dbfa6182..3feee6a0659098541f43b1235248cb926ea0dca2 100644 |
| --- a/base/process/launch_win.cc |
| +++ b/base/process/launch_win.cc |
| @@ -103,7 +103,7 @@ void RouteStdioToConsole() { |
| bool LaunchProcess(const string16& cmdline, |
| const LaunchOptions& options, |
| - ProcessHandle* process_handle) { |
| + win::ScopedHandle* process_handle) { |
| STARTUPINFO startup_info = {}; |
| startup_info.cb = sizeof(startup_info); |
| if (options.empty_desktop_name) |
| @@ -136,7 +136,7 @@ bool LaunchProcess(const string16& cmdline, |
| if (options.force_breakaway_from_job_) |
| flags |= CREATE_BREAKAWAY_FROM_JOB; |
| - base::win::ScopedProcessInformation process_info; |
| + PROCESS_INFORMATION temp_process_info = {}; |
| if (options.as_user) { |
| flags |= CREATE_UNICODE_ENVIRONMENT; |
| @@ -152,7 +152,7 @@ bool LaunchProcess(const string16& cmdline, |
| const_cast<wchar_t*>(cmdline.c_str()), |
| NULL, NULL, options.inherit_handles, flags, |
| enviroment_block, NULL, &startup_info, |
| - process_info.Receive()); |
| + &temp_process_info); |
| DestroyEnvironmentBlock(enviroment_block); |
| if (!launched) { |
| DPLOG(ERROR); |
| @@ -162,11 +162,13 @@ bool LaunchProcess(const string16& cmdline, |
| if (!CreateProcess(NULL, |
| const_cast<wchar_t*>(cmdline.c_str()), NULL, NULL, |
| options.inherit_handles, flags, NULL, NULL, |
| - &startup_info, process_info.Receive())) { |
| + &startup_info, &temp_process_info)) { |
| DPLOG(ERROR); |
| return false; |
| } |
| } |
| + base::win::ScopedProcessInformation process_info; |
| + process_info.Set(temp_process_info); |
|
cpu_(ooo_6.6-7.5)
2013/11/20 02:17:16
can we make it so we can write:
base::win::ScopedP
rvargas (doing something else)
2013/11/20 20:30:47
Done.
|
| if (options.job_handle) { |
| if (0 == AssignProcessToJobObject(options.job_handle, |
| @@ -184,7 +186,7 @@ bool LaunchProcess(const string16& cmdline, |
| // If the caller wants the process handle, we won't close it. |
| if (process_handle) |
| - *process_handle = process_info.TakeProcessHandle(); |
| + process_handle->Set(process_info.TakeProcessHandle()); |
| return true; |
| } |
| @@ -192,7 +194,13 @@ bool LaunchProcess(const string16& cmdline, |
| bool LaunchProcess(const CommandLine& cmdline, |
| const LaunchOptions& options, |
| ProcessHandle* process_handle) { |
| - return LaunchProcess(cmdline.GetCommandLineString(), options, process_handle); |
| + if (!process_handle) |
| + return LaunchProcess(cmdline.GetCommandLineString(), options, NULL); |
| + |
| + win::ScopedHandle process; |
| + bool rv = LaunchProcess(cmdline.GetCommandLineString(), options, &process); |
| + *process_handle = process.Take(); |
| + return rv; |
| } |
| bool SetJobObjectLimitFlags(HANDLE job_object, DWORD limit_flags) { |
| @@ -233,8 +241,7 @@ bool GetAppOutput(const CommandLine& cl, std::string* output) { |
| FilePath::StringType writable_command_line_string(cl.GetCommandLineString()); |
| - base::win::ScopedProcessInformation proc_info; |
| - STARTUPINFO start_info = { 0 }; |
| + STARTUPINFO start_info = {}; |
| start_info.cb = sizeof(STARTUPINFO); |
| start_info.hStdOutput = out_write; |
| @@ -244,14 +251,17 @@ bool GetAppOutput(const CommandLine& cl, std::string* output) { |
| start_info.dwFlags |= STARTF_USESTDHANDLES; |
| // Create the child process. |
| + PROCESS_INFORMATION temp_process_info = {}; |
| if (!CreateProcess(NULL, |
| &writable_command_line_string[0], |
| NULL, NULL, |
| TRUE, // Handles are inherited. |
| - 0, NULL, NULL, &start_info, proc_info.Receive())) { |
| + 0, NULL, NULL, &start_info, &temp_process_info)) { |
| NOTREACHED() << "Failed to start process"; |
| return false; |
| } |
| + base::win::ScopedProcessInformation proc_info; |
| + proc_info.Set(temp_process_info); |
| // Close our writing end of pipe now. Otherwise later read would not be able |
| // to detect end of child's output. |