summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-01 22:35:26 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-01 22:35:26 +0000
commita6ed943ee5fd6d4b09618f9154da2e715e9b053c (patch)
treeacac6c6a9478d00b3592497f4f3ae7c63802d919
parent30eb751d1a778b73e20c238ec2f54b7293eb1b6f (diff)
downloadchromium_src-a6ed943ee5fd6d4b09618f9154da2e715e9b053c.zip
chromium_src-a6ed943ee5fd6d4b09618f9154da2e715e9b053c.tar.gz
chromium_src-a6ed943ee5fd6d4b09618f9154da2e715e9b053c.tar.bz2
Adds some debugging code in hopes of tracking down a
crash. Specifically: . Adds a CHECK to IDMap that evaluates to true if adding NULL. The default isn't to do this check. . browser_shutdown CHECKs if the # RPHs changes while iterating through the RPHs. BUG=15615 TEST=none Review URL: http://codereview.chromium.org/150181 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19779 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/id_map.h17
-rw-r--r--chrome/browser/browser_shutdown.cc4
-rw-r--r--chrome/browser/renderer_host/render_process_host.cc1
3 files changed, 19 insertions, 3 deletions
diff --git a/base/id_map.h b/base/id_map.h
index 4b8ef29..9f6111e 100644
--- a/base/id_map.h
+++ b/base/id_map.h
@@ -28,12 +28,17 @@ class IDMap {
// Note, use iterator->first to get the ID, iterator->second to get the T*
typedef typename HashTable::const_iterator const_iterator;
- IDMap() : next_id_(1) {
+ IDMap() : next_id_(1), check_on_null_data_(false) {
}
- IDMap(const IDMap& other) : next_id_(other.next_id_),
- data_(other.data_) {
+ IDMap(const IDMap& other)
+ : next_id_(other.next_id_),
+ data_(other.data_),
+ check_on_null_data_(other.check_on_null_data_) {
}
+ // Sets whether Add should CHECK if passed in NULL data. Default is false.
+ void set_check_on_null_data(bool value) { check_on_null_data_ = value; }
+
const_iterator begin() const {
return data_.begin();
}
@@ -43,6 +48,7 @@ class IDMap {
// Adds a view with an automatically generated unique ID. See AddWithID.
int32 Add(T* data) {
+ CHECK(!check_on_null_data_ || data);
int32 this_id = next_id_;
DCHECK(data_.find(this_id) == data_.end()) << "Inserting duplicate item";
data_[this_id] = data;
@@ -55,6 +61,7 @@ class IDMap {
// this function, or allow this object to generate IDs and call Add. These
// two methods may not be mixed, or duplicate IDs may be generated
void AddWithID(T* data, int32 id) {
+ CHECK(!check_on_null_data_ || data);
DCHECK(data_.find(id) == data_.end()) << "Inserting duplicate item";
data_[id] = data;
}
@@ -88,6 +95,10 @@ class IDMap {
int32 next_id_;
HashTable data_;
+
+ private:
+ // See description above setter.
+ bool check_on_null_data_;
};
#endif // BASE_ID_MAP_H__
diff --git a/chrome/browser/browser_shutdown.cc b/chrome/browser/browser_shutdown.cc
index 8ef0dbe..b67542d 100644
--- a/chrome/browser/browser_shutdown.cc
+++ b/chrome/browser/browser_shutdown.cc
@@ -65,6 +65,7 @@ void OnShutdownStarting(ShutdownType type) {
// a no-op in some cases, so we still need to go through the normal
// shutdown path for the ones that didn't exit here.
shutdown_num_processes_slow_ = 0;
+ size_t start_rph_size = RenderProcessHost::size();
for (RenderProcessHost::iterator hosts = RenderProcessHost::begin();
hosts != RenderProcessHost::end();
++hosts) {
@@ -74,6 +75,9 @@ void OnShutdownStarting(ShutdownType type) {
// higher up, it's not possible to get here. Confirm this and change
// FastShutdownIfPossible to just be FastShutdown.
shutdown_num_processes_slow_++;
+ // The number of RPHs should not have changed as the result of invoking
+ // FastShutdownIfPossible.
+ CHECK(start_rph_size == RenderProcessHost::size());
}
}
}
diff --git a/chrome/browser/renderer_host/render_process_host.cc b/chrome/browser/renderer_host/render_process_host.cc
index 49e70da..dc1f8b1 100644
--- a/chrome/browser/renderer_host/render_process_host.cc
+++ b/chrome/browser/renderer_host/render_process_host.cc
@@ -85,6 +85,7 @@ RenderProcessHost::RenderProcessHost(Profile* profile)
pid_(-1),
profile_(profile),
sudden_termination_allowed_(true) {
+ all_hosts.set_check_on_null_data(true);
}
RenderProcessHost::~RenderProcessHost() {