diff options
author | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-12 01:56:58 +0000 |
---|---|---|
committer | hclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-12 01:56:58 +0000 |
commit | a8388cdd6e3b232999377e78ac736878697b9f36 (patch) | |
tree | e47cede1168dfbf8f49975705571424f3de5ec64 | |
parent | f6b4853153c6be7a7ce092d4c5f3172c022da561 (diff) | |
download | chromium_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.cc | 4 | ||||
-rw-r--r-- | chrome/browser/renderer_host/audio_renderer_host.h | 5 | ||||
-rw-r--r-- | chrome/browser/renderer_host/audio_renderer_host_unittest.cc | 6 |
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_; |