summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-12 01:56:58 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-12 01:56:58 +0000
commita8388cdd6e3b232999377e78ac736878697b9f36 (patch)
treee47cede1168dfbf8f49975705571424f3de5ec64
parentf6b4853153c6be7a7ce092d4c5f3172c022da561 (diff)
downloadchromium_src-a8388cdd6e3b232999377e78ac736878697b9f36.zip
chromium_src-a8388cdd6e3b232999377e78ac736878697b9f36.tar.gz
chromium_src-a8388cdd6e3b232999377e78ac736878697b9f36.tar.bz2
Fix a memory leak caused by AudioRenedererHost.
BUG=7608 AudioManager::CreateAudioManager() saves the instance in a static variable and let it leak, so don't call it until there's a better lifetime management of it. Review URL: http://codereview.chromium.org/21277 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9636 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/renderer_host/audio_renderer_host.cc4
-rw-r--r--chrome/browser/renderer_host/audio_renderer_host.h5
-rw-r--r--chrome/browser/renderer_host/audio_renderer_host_unittest.cc6
3 files changed, 10 insertions, 5 deletions
diff --git a/chrome/browser/renderer_host/audio_renderer_host.cc b/chrome/browser/renderer_host/audio_renderer_host.cc
index fd798ac..5c0d0f9 100644
--- a/chrome/browser/renderer_host/audio_renderer_host.cc
+++ b/chrome/browser/renderer_host/audio_renderer_host.cc
@@ -192,8 +192,8 @@ void AudioRendererHost::OnInitialized() {
// Also create the AudioManager singleton in this thread.
// TODO(hclam): figure out a better location to initialize the AudioManager
- // singleton.
- AudioManager::GetAudioManager();
+ // singleton. The following method call seems to create a memory leak.
+ // AudioManager::GetAudioManager();
}
void AudioRendererHost::OnDestroyed() {
diff --git a/chrome/browser/renderer_host/audio_renderer_host.h b/chrome/browser/renderer_host/audio_renderer_host.h
index 8128d61..df2c14e 100644
--- a/chrome/browser/renderer_host/audio_renderer_host.h
+++ b/chrome/browser/renderer_host/audio_renderer_host.h
@@ -32,9 +32,10 @@
// which may result in self-destruction.
//
// TODO(hclam): Have these things done before having real implementations:
-// 1. Make sure this class has greater or equal lifetime to
+// 1. Make AudioManager a singleton and construct/destruct it properly.
+// 2. Make sure this class has greater or equal lifetime to
// IPC:Message::Sender, essentially ResourceMessageFilter.
-// 2. Listen to destruction event of the browser and do cleanup in case this
+// 3. Listen to destruction event of the browser and do cleanup in case this
// class is not destructed nicely during browser close.
#ifndef CHROME_BROWSER_RENDERER_HOST_AUDIO_RENDERER_HOST_H_
diff --git a/chrome/browser/renderer_host/audio_renderer_host_unittest.cc b/chrome/browser/renderer_host/audio_renderer_host_unittest.cc
index d7ab831..2942dac 100644
--- a/chrome/browser/renderer_host/audio_renderer_host_unittest.cc
+++ b/chrome/browser/renderer_host/audio_renderer_host_unittest.cc
@@ -13,11 +13,15 @@ class AudioRendererHostTest : public testing::Test {
virtual void SetUp() {
// Create a message loop so AudioRendererHost can use it.
message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
- host_ = new AudioRendererHost(MessageLoop::current());
+ host_ = new AudioRendererHost(message_loop_.get());
}
virtual void TearDown() {
+ // This task post a task to message_loop_ to do internal destruction on
+ // message_loop_.
host_->Destroy();
+ // We need to continue running message_loop_ to complete all destructions.
+ message_loop_->RunAllPending();
}
scoped_refptr<AudioRendererHost> host_;