summaryrefslogtreecommitdiffstats
path: root/chrome/browser/task_manager.h
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-20 12:56:43 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-20 12:56:43 +0000
commitbed76fded2fb471c26e6f78c6709fb3c3e5a04a3 (patch)
tree29404fe76173adc18407a3ce4b55a4f10a558679 /chrome/browser/task_manager.h
parent64569cce3a56ca39eea8712a4f91caad7de32be2 (diff)
downloadchromium_src-bed76fded2fb471c26e6f78c6709fb3c3e5a04a3.zip
chromium_src-bed76fded2fb471c26e6f78c6709fb3c3e5a04a3.tar.gz
chromium_src-bed76fded2fb471c26e6f78c6709fb3c3e5a04a3.tar.bz2
Fix a crash on browser exit after opening TaskManager.
TaskManager is a singleton, so it's destroyed by AtExitManager. At the time of destruction it cannot register AtExit callbacks (AtExitManager requires that). It turns out that some Windows view code wants to register an AtExit callback during destruction. For more info about view code, see http://src.chromium.org/viewvc/chrome?view=rev&revision=9161 The fix is to destroy the view early, using EnsureShutdown static method of TaskManager. It was also necessary to delete child views a bit earlier to avoid another crashed. Added a regression browser_test and verified that it's broken without this fix. http://crbug.com/11180 Review URL: http://codereview.chromium.org/114031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16474 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager.h')
-rw-r--r--chrome/browser/task_manager.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/chrome/browser/task_manager.h b/chrome/browser/task_manager.h
index d58a21e..a66cb8f 100644
--- a/chrome/browser/task_manager.h
+++ b/chrome/browser/task_manager.h
@@ -98,6 +98,10 @@ class TaskManager {
// Close the task manager.
void Close();
+ // Do the cleanup that can't be done during singleton destruction by
+ // AtExitManager. Does nothing if the TaskManager hasn't been initialized.
+ static void EnsureShutdown();
+
// Returns true if the current selection includes the browser process.
bool BrowserProcessIsSelected();
@@ -133,6 +137,9 @@ class TaskManager {
// Returns the singleton instance (and initializes it if necessary).
static TaskManager* GetInstance();
+ // Flag set to true when TaskManager is initialized.
+ static bool initialized_;
+
// The model used for gathering and processing task data. It is ref counted
// because it is passed as a parameter to MessageLoop::InvokeLater().
scoped_refptr<TaskManagerModel> model_;