diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-07 01:58:17 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-07 01:58:17 +0000 |
commit | 2f9bf8f9c6c6b11f7a440524d669f91e6750f28b (patch) | |
tree | 36c4daf69c857c2ac3d95b651fe0f58f7d6777af /chrome/browser/renderer_host | |
parent | ac9d0c253fa4a3bd1d97bacc199aeb969d747c2e (diff) | |
download | chromium_src-2f9bf8f9c6c6b11f7a440524d669f91e6750f28b.zip chromium_src-2f9bf8f9c6c6b11f7a440524d669f91e6750f28b.tar.gz chromium_src-2f9bf8f9c6c6b11f7a440524d669f91e6750f28b.tar.bz2 |
Reap renderer processes following fast termination.
I'm still seeing some defunct processes, but not one for every tab, and they don't appear to be former renderer processes, so that's probably a separate bug.
BUG=23778
TEST=after closing a tab ps shows that the renderer is gone (not just defunct)
Review URL: http://codereview.chromium.org/242155
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28217 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-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; } |