summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-06 00:58:43 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-06 00:58:43 +0000
commit6b9980acad8f549a03b3c1df844fb803ac2439c8 (patch)
tree6f86ffb98f527e4e1e734b89e15dfadd132333cc /chrome
parent3702f227534ca8fb2218a2ba5d4e5bdd32b17ad8 (diff)
downloadchromium_src-6b9980acad8f549a03b3c1df844fb803ac2439c8.zip
chromium_src-6b9980acad8f549a03b3c1df844fb803ac2439c8.tar.gz
chromium_src-6b9980acad8f549a03b3c1df844fb803ac2439c8.tar.bz2
Redo my single process cleanup. The problem was that Stop() had to be called in RendererMainThread's dtor, not Thread's, otherwise the vtable lookup won't use RendererMainThread's CleanUp function.
Review URL: http://codereview.chromium.org/40199 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11073 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.cc20
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.h4
2 files changed, 10 insertions, 14 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc
index 2610dba..3f82a3a 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.cc
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc
@@ -67,10 +67,6 @@
#include "skia/include/SkBitmap.h"
-namespace {
-
-// ----------------------------------------------------------------------------
-
// This class creates the IO thread for the renderer when running in
// single-process mode. It's not used in multi-process mode.
class RendererMainThread : public base::Thread {
@@ -81,6 +77,10 @@ class RendererMainThread : public base::Thread {
render_process_(NULL) {
}
+ ~RendererMainThread() {
+ Stop();
+ }
+
protected:
virtual void Init() {
#if defined(OS_WIN)
@@ -121,10 +121,6 @@ bool GetRendererPath(std::wstring* cmd_line) {
const wchar_t* const kDesktopName = L"ChromeRendererDesktop";
-} // namespace
-
-//------------------------------------------------------------------------------
-
// static
void BrowserRenderProcessHost::RegisterPrefs(PrefService* prefs) {
prefs->RegisterBooleanPref(prefs::kStartRenderersManually, false);
@@ -346,15 +342,11 @@ bool BrowserRenderProcessHost::Init() {
// communicating IO. This can lead to deadlocks where the RenderThread is
// waiting for the IO to complete, while the browsermain is trying to pass
// an event to the RenderThread.
- RendererMainThread* render_thread = new RendererMainThread(channel_id);
-
- // This singleton keeps track of our pointers to avoid a leak.
- Singleton<std::vector<linked_ptr<RendererMainThread> > >::get()->push_back(
- linked_ptr<RendererMainThread>(render_thread));
+ in_process_renderer_.reset(new RendererMainThread(channel_id));
base::Thread::Options options;
options.message_loop_type = MessageLoop::TYPE_IO;
- render_thread->StartWithOptions(options);
+ in_process_renderer_->StartWithOptions(options);
} else {
if (g_browser_process->local_state() &&
g_browser_process->local_state()->GetBoolean(
diff --git a/chrome/browser/renderer_host/browser_render_process_host.h b/chrome/browser/renderer_host/browser_render_process_host.h
index 03dfc43..62a7dc6 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.h
+++ b/chrome/browser/renderer_host/browser_render_process_host.h
@@ -24,6 +24,7 @@
class CommandLine;
class GURL;
class PrefService;
+class RendererMainThread;
class RenderWidgetHelper;
class WebContents;
@@ -159,6 +160,9 @@ class BrowserRenderProcessHost : public RenderProcessHost,
// This is used to clear our cache five seconds after the last use.
base::DelayTimer<BrowserRenderProcessHost> cached_dibs_cleaner_;
+ // Used in single-process mode.
+ scoped_ptr<RendererMainThread> in_process_renderer_;
+
DISALLOW_COPY_AND_ASSIGN(BrowserRenderProcessHost);
};