diff options
author | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-12 23:43:17 +0000 |
---|---|---|
committer | jrg@chromium.org <jrg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-12 23:43:17 +0000 |
commit | 9fbb44c3c924152df427cbca4014994e3969d4cd (patch) | |
tree | 71fabd1c8f5111020523ffca69d030a965a32d3e /chrome | |
parent | efe414eeae9ffdef6d6176b3936799a10dbc06a1 (diff) | |
download | chromium_src-9fbb44c3c924152df427cbca4014994e3969d4cd.zip chromium_src-9fbb44c3c924152df427cbca4014994e3969d4cd.tar.gz chromium_src-9fbb44c3c924152df427cbca4014994e3969d4cd.tar.bz2 |
Fix memory leak in extension pref store
BUG=none
Memory bot which will turn green with this change:
http://build.chromium.org/buildbot/memory/builders/Linux%20Heapcheck/builds/4870/steps/heapcheck%20test:%20unit/logs/stdio
Review URL: http://codereview.chromium.org/2923008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52150 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/extensions/extension_pref_store.cc | 6 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_pref_store.h | 2 |
2 files changed, 7 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extension_pref_store.cc b/chrome/browser/extensions/extension_pref_store.cc index fd0a063..437ca77 100644 --- a/chrome/browser/extensions/extension_pref_store.cc +++ b/chrome/browser/extensions/extension_pref_store.cc @@ -5,6 +5,7 @@ #include "chrome/browser/extensions/extension_pref_store.h" #include "base/logging.h" +#include "base/stl_util-inl.h" #include "base/values.h" #include "chrome/browser/pref_service.h" @@ -13,6 +14,10 @@ ExtensionPrefStore::ExtensionPrefStore(PrefService* pref_service) prefs_(new DictionaryValue()) { } +ExtensionPrefStore::~ExtensionPrefStore() { + STLDeleteElements(&extension_stack_); +} + // This could be sped up by keeping track of which extension currently controls // a given preference, among other optimizations. But we estimate that fewer // than 10 installed extensions will be trying to control any preferences, so @@ -87,6 +92,7 @@ void ExtensionPrefStore::UninstallExtension(std::string extension_id) { i != extension_stack_.end(); ++i) { if ((*i)->extension_id == extension_id) { pref_values.reset((*i)->pref_values); + delete *i; extension_stack_.erase(i); break; } diff --git a/chrome/browser/extensions/extension_pref_store.h b/chrome/browser/extensions/extension_pref_store.h index a0c420f..384537c 100644 --- a/chrome/browser/extensions/extension_pref_store.h +++ b/chrome/browser/extensions/extension_pref_store.h @@ -24,7 +24,7 @@ class Value; class ExtensionPrefStore : public PrefStore { public: explicit ExtensionPrefStore(PrefService* pref_service); - virtual ~ExtensionPrefStore() {} + virtual ~ExtensionPrefStore(); // The PrefService creates the ExtensionPrefStore, so we need to be able to // defer setting the PrefService here until after construction. |