summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorkkania@chromium.org <kkania@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-05 02:41:38 +0000
committerkkania@chromium.org <kkania@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-05 02:41:38 +0000
commitcd69619bc053d527b7c82aac81c605157b28d01f (patch)
treef5a50afb86bd0ee0e0dae9a23213dcfaf1b9105e /chrome/browser/renderer_host
parent980dbfd913c463f5fa8f1b5943327fe5e4799b20 (diff)
downloadchromium_src-cd69619bc053d527b7c82aac81c605157b28d01f.zip
chromium_src-cd69619bc053d527b7c82aac81c605157b28d01f.tar.gz
chromium_src-cd69619bc053d527b7c82aac81c605157b28d01f.tar.bz2
Revert 46384 - Fix race in zygote_host_linux where socket was being read from and written to on different threads.
Made ZygoteHost methods all run on PROCESS_LAUNCHER thread. PostTask in linux from UI thread to PROCESS_LAUNCHER thread for DidProcessCrash. Changed DidProcessCrash to answer via a callback, which occurs asynchronously on linux. Rework cases in nacl_host, browser_render_process_host, and child_process_host where this method was being called to fit the callback model. BUG=31737 TEST=none Review URL: http://codereview.chromium.org/1695026 TBR=kkania@chromium.org Review URL: http://codereview.chromium.org/1933007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46429 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.cc39
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.h1
-rw-r--r--chrome/browser/renderer_host/render_process_host.h10
3 files changed, 22 insertions, 28 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc
index f7fb092..fff6622 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.cc
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc
@@ -860,12 +860,23 @@ void BrowserRenderProcessHost::OnChannelError() {
if (!channel_.get())
return;
+ // NULL in single process mode or if fast termination happened.
+ bool did_crash =
+ child_process_.get() ? child_process_->DidProcessCrash() : false;
+
+ if (did_crash) {
+ UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes",
+ extension_process_ ? 2 : 1);
+ }
+
+ RendererClosedDetails details(did_crash, extension_process_);
NotificationService::current()->Notify(
NotificationType::RENDERER_PROCESS_CLOSED,
Source<RenderProcessHost>(this),
- NotificationService::NoDetails());
+ Details<RendererClosedDetails>(&details));
WebCacheManager::GetInstance()->Remove(id());
+ child_process_.reset();
channel_.reset();
IDMap<IPC::Channel::Listener>::iterator iter(&listeners_);
@@ -877,32 +888,6 @@ void BrowserRenderProcessHost::OnChannelError() {
ClearTransportDIBCache();
- if (child_process_.get()) {
- // Determine whether the process crashed or not. This method will invoke
- // OnDidProcessCrashDetermined with the result. This may occur
- // asynchronously.
- child_process_->DetermineDidProcessCrash();
- } else {
- // This occurs in single process mode or if fast termination happened.
- // Manually trigger OnDidProcessCrashDetermined, because we know this is
- // not a crash.
- OnDidProcessCrashDetermined(false);
- }
-}
-
-void BrowserRenderProcessHost::OnDidProcessCrashDetermined(bool did_crash) {
- child_process_.reset();
-
- if (did_crash) {
- UMA_HISTOGRAM_PERCENTAGE("BrowserRenderProcessHost.ChildCrashes",
- extension_process_ ? 2 : 1);
-
- NotificationService::current()->Notify(
- NotificationType::RENDERER_PROCESS_CRASHED,
- Source<RenderProcessHost>(this),
- Details<bool>(&extension_process_));
- }
-
// this object is not deleted at this point and may be reused later.
// TODO(darin): clean this up
}
diff --git a/chrome/browser/renderer_host/browser_render_process_host.h b/chrome/browser/renderer_host/browser_render_process_host.h
index 00c2a02..2a7f8b6 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.h
+++ b/chrome/browser/renderer_host/browser_render_process_host.h
@@ -100,7 +100,6 @@ class BrowserRenderProcessHost : public RenderProcessHost,
// ChildProcessLauncher::Client implementation.
virtual void OnProcessLaunched();
- virtual void OnDidProcessCrashDetermined(bool did_crash);
private:
friend class VisitRelayingRenderProcessHost;
diff --git a/chrome/browser/renderer_host/render_process_host.h b/chrome/browser/renderer_host/render_process_host.h
index 1eb9804..1ceeb42 100644
--- a/chrome/browser/renderer_host/render_process_host.h
+++ b/chrome/browser/renderer_host/render_process_host.h
@@ -46,6 +46,16 @@ class RenderProcessHost : public IPC::Channel::Sender,
TYPE_EXTENSION, // Renderer with extension privileges.
};
+ // Details for RENDERER_PROCESS_CLOSED notifications.
+ struct RendererClosedDetails {
+ RendererClosedDetails(bool did_crash, bool was_extension_renderer) {
+ this->did_crash = did_crash;
+ this->was_extension_renderer = was_extension_renderer;
+ }
+ bool did_crash;
+ bool was_extension_renderer;
+ };
+
explicit RenderProcessHost(Profile* profile);
virtual ~RenderProcessHost();