| Index: content/browser/child_process_launcher.cc
|
| diff --git a/content/browser/child_process_launcher.cc b/content/browser/child_process_launcher.cc
|
| index e497762aff8ebbd651e8467c6c0409ff7c8f8fe2..cbf13e97adf4a2fdb50233c895227e03485828cc 100644
|
| --- a/content/browser/child_process_launcher.cc
|
| +++ b/content/browser/child_process_launcher.cc
|
| @@ -339,9 +339,6 @@ class ChildProcessLauncher::Context
|
| if (!process_.handle())
|
| return;
|
|
|
| - if (!terminate_child_on_shutdown_)
|
| - return;
|
| -
|
| // On Posix, EnsureProcessTerminated can lead to 2 seconds of sleep! So
|
| // don't this on the UI/IO threads.
|
| BrowserThread::PostTask(
|
| @@ -351,7 +348,8 @@ class ChildProcessLauncher::Context
|
| #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
|
| zygote_,
|
| #endif
|
| - process_.handle()));
|
| + process_.handle(),
|
| + !terminate_child_on_shutdown_));
|
| process_.set_handle(base::kNullProcessHandle);
|
| }
|
|
|
| @@ -365,7 +363,8 @@ class ChildProcessLauncher::Context
|
| #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
|
| bool zygote,
|
| #endif
|
| - base::ProcessHandle handle) {
|
| + base::ProcessHandle handle,
|
| + bool wait_for_child_to_exit_cleanly) {
|
| #if defined(OS_ANDROID)
|
| LOG(INFO) << "ChromeProcess: Stopping process with handle " << handle;
|
| StopChildProcess(handle);
|
| @@ -373,7 +372,9 @@ class ChildProcessLauncher::Context
|
| base::Process process(handle);
|
| // Client has gone away, so just kill the process. Using exit code 0
|
| // means that UMA won't treat this as a crash.
|
| - process.Terminate(RESULT_CODE_NORMAL_EXIT);
|
| + if (!wait_for_child_to_exit_cleanly)
|
| + process.Terminate(RESULT_CODE_NORMAL_EXIT);
|
| +
|
| // On POSIX, we must additionally reap the child.
|
| #if defined(OS_POSIX)
|
| #if !defined(OS_MACOSX)
|
| @@ -384,7 +385,10 @@ class ChildProcessLauncher::Context
|
| } else
|
| #endif // !OS_MACOSX
|
| {
|
| - base::EnsureProcessTerminated(handle);
|
| + if (wait_for_child_to_exit_cleanly)
|
| + base::EnsureProcessGetsReaped(handle);
|
| + else
|
| + base::EnsureProcessTerminated(handle);
|
| }
|
| #endif // OS_POSIX
|
| process.Close();
|
|
|