diff options
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc index b3dc315..d699592 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.cc +++ b/chrome/browser/renderer_host/browser_render_process_host.cc @@ -652,7 +652,7 @@ void BrowserRenderProcessHost::SendUserScriptsUpdate( bool BrowserRenderProcessHost::FastShutdownIfPossible() { if (!process_.handle()) return false; // Render process is probably crashed. - if (BrowserRenderProcessHost::run_renderer_in_process()) + if (run_renderer_in_process()) return false; // Single process mode can't do fast shutdown. // Test if there's an unload listener. @@ -684,7 +684,20 @@ bool BrowserRenderProcessHost::FastShutdownIfPossible() { // Otherwise, we're allowed to just terminate the process. Using exit code 0 // means that UMA won't treat this as a renderer crash. process_.Terminate(ResultCodes::NORMAL_EXIT); + // On POSIX, we must additionally reap the child. +#if defined(OS_POSIX) + if (zygote_child_) { +#if defined(OS_LINUX) + // If the renderer was created via a zygote, we have to proxy the reaping + // through the zygote process. + Singleton<ZygoteHost>()->EnsureProcessTerminated(process_.handle()); +#endif // defined(OS_LINUX) + } else { + ProcessWatcher::EnsureProcessGetsReaped(process_.handle()); + } +#endif // defined(OS_POSIX) process_.Close(); + fast_shutdown_started_ = true; return true; } |