summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-23 21:52:01 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-23 21:52:01 +0000
commitdc7af3c01d667fa2ddc6a9d75c73d0c12fd2137c (patch)
treeadb8ce1c4a629ae9cf9f83bdf64710e6ac0f0353 /chrome/browser
parent292170bc90dc4a80156990a5cf18c2acec4ae547 (diff)
downloadchromium_src-dc7af3c01d667fa2ddc6a9d75c73d0c12fd2137c.zip
chromium_src-dc7af3c01d667fa2ddc6a9d75c73d0c12fd2137c.tar.gz
chromium_src-dc7af3c01d667fa2ddc6a9d75c73d0c12fd2137c.tar.bz2
Fixes leak of UserDataManager on shutdown.
BUG=none TEST=none Review URL: http://codereview.chromium.org/18714 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8581 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/browser_main.cc3
-rw-r--r--chrome/browser/user_data_manager.cc5
-rw-r--r--chrome/browser/user_data_manager.h2
3 files changed, 6 insertions, 4 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 29d984e..b492380 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -309,7 +309,7 @@ int BrowserMain(const MainFunctionParams& parameters) {
StatisticsRecorder statistics;
// Initialize the shared instance of user data manager.
- UserDataManager::Create();
+ scoped_ptr<UserDataManager> user_data_manager(UserDataManager::Create());
// Try to create/load the profile.
ProfileManager* profile_manager = browser_process->profile_manager();
@@ -546,4 +546,3 @@ int BrowserMain(const MainFunctionParams& parameters) {
return result_code;
}
-
diff --git a/chrome/browser/user_data_manager.cc b/chrome/browser/user_data_manager.cc
index 554c53f..bc078db 100644
--- a/chrome/browser/user_data_manager.cc
+++ b/chrome/browser/user_data_manager.cc
@@ -91,11 +91,12 @@ static const wchar_t kProfileFolderSeparator[] = L"-";
UserDataManager* UserDataManager::instance_ = NULL;
// static
-void UserDataManager::Create() {
+UserDataManager* UserDataManager::Create() {
DCHECK(!instance_);
std::wstring user_data;
PathService::Get(chrome::DIR_USER_DATA, &user_data);
instance_ = new UserDataManager(user_data);
+ return instance_;
}
// static
@@ -123,6 +124,8 @@ UserDataManager::UserDataManager(const std::wstring& user_data_root)
}
UserDataManager::~UserDataManager() {
+ if (instance_ == this)
+ instance_ = NULL;
}
// static
diff --git a/chrome/browser/user_data_manager.h b/chrome/browser/user_data_manager.h
index f5e4522..f688448 100644
--- a/chrome/browser/user_data_manager.h
+++ b/chrome/browser/user_data_manager.h
@@ -27,7 +27,7 @@ class UserDataManager {
public:
// Creates the shared instance of this class. This method is not thread-safe,
// so the shared instance should be created on the main thread.
- static void Create();
+ static UserDataManager* Create();
// Returns the shared instance. CreateInstance must be called before callling
// this method.