diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-06 00:58:43 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-06 00:58:43 +0000 |
commit | 6b9980acad8f549a03b3c1df844fb803ac2439c8 (patch) | |
tree | 6f86ffb98f527e4e1e734b89e15dfadd132333cc /chrome | |
parent | 3702f227534ca8fb2218a2ba5d4e5bdd32b17ad8 (diff) | |
download | chromium_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.cc | 20 | ||||
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.h | 4 |
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); }; |