summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-07 01:58:17 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-07 01:58:17 +0000
commit2f9bf8f9c6c6b11f7a440524d669f91e6750f28b (patch)
tree36c4daf69c857c2ac3d95b651fe0f58f7d6777af /chrome/browser/renderer_host
parentac9d0c253fa4a3bd1d97bacc199aeb969d747c2e (diff)
downloadchromium_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.cc15
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;
}