summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorwtc@google.com <wtc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-10 22:30:18 +0000
committerwtc@google.com <wtc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-12-10 22:30:18 +0000
commit834e1940adac0d36fa796b0bea95e39eb03bae4e (patch)
tree5221cfff62a99a39f8661770b0f2d130b8a26b8d /chrome/browser
parent4b4d1adc53b7e016b7966a38c48a31ec9e0aeda2 (diff)
downloadchromium_src-834e1940adac0d36fa796b0bea95e39eb03bae4e.zip
chromium_src-834e1940adac0d36fa796b0bea95e39eb03bae4e.tar.gz
chromium_src-834e1940adac0d36fa796b0bea95e39eb03bae4e.tar.bz2
Remove the unneeded CHECKs. Add a CHECK to determine
whether the recursive call to RemovePendingRequest is removing the same or a different request. R=eroman BUG=4749 Review URL: http://codereview.chromium.org/13329 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6746 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/resource_dispatcher_host.cc20
-rw-r--r--chrome/browser/resource_dispatcher_host.h5
2 files changed, 15 insertions, 10 deletions
diff --git a/chrome/browser/resource_dispatcher_host.cc b/chrome/browser/resource_dispatcher_host.cc
index 8317b0d..7edfccd 100644
--- a/chrome/browser/resource_dispatcher_host.cc
+++ b/chrome/browser/resource_dispatcher_host.cc
@@ -1430,12 +1430,12 @@ ResourceDispatcherHost::ResourceDispatcherHost(MessageLoop* io_loop)
plugin_service_(PluginService::GetInstance()),
method_runner_(this),
is_shutdown_(false),
- removing_pending_request_(0) {
+ removing_pending_request_(0),
+ request_to_remove_(NULL) {
}
ResourceDispatcherHost::~ResourceDispatcherHost() {
AsyncEventHandler::GlobalCleanup();
- CHECK(!removing_pending_request_);
STLDeleteValues(&pending_requests_);
}
@@ -1468,7 +1468,6 @@ void ResourceDispatcherHost::Shutdown() {
void ResourceDispatcherHost::OnShutdown() {
DCHECK(MessageLoop::current() == io_loop_);
is_shutdown_ = true;
- CHECK(!removing_pending_request_);
STLDeleteValues(&pending_requests_);
// Make sure we shutdown the timer now, otherwise by the time our destructor
// runs if the timer is still running the Task is deleted twice (once by
@@ -1936,27 +1935,28 @@ void ResourceDispatcherHost::RemovePendingRequest(int render_process_host_id,
void ResourceDispatcherHost::RemovePendingRequest(
const PendingRequestList::iterator& iter) {
- CHECK(!removing_pending_request_);
- removing_pending_request_ = 1;
- size_t num_requests_before = pending_requests_.size();
+ if (request_to_remove_) {
+ CHECK(iter->second == request_to_remove_);
+ }
// Notify the login handler that this request object is going away.
ExtraRequestInfo* info = ExtraInfoForRequest(iter->second);
if (info && info->login_handler)
info->login_handler->OnRequestCancelled();
- CHECK(pending_requests_.size() == num_requests_before);
+ CHECK(!removing_pending_request_);
+ removing_pending_request_ = 1;
+ request_to_remove_ = iter->second;
+
delete iter->second;
- CHECK(pending_requests_.size() == num_requests_before);
pending_requests_.erase(iter);
- CHECK(pending_requests_.size() == num_requests_before - 1);
// If we have no more pending requests, then stop the load state monitor
if (pending_requests_.empty())
update_load_states_timer_.Stop();
- CHECK(pending_requests_.size() == num_requests_before - 1);
removing_pending_request_ = 0;
+ request_to_remove_ = NULL;
}
// URLRequest::Delegate -------------------------------------------------------
diff --git a/chrome/browser/resource_dispatcher_host.h b/chrome/browser/resource_dispatcher_host.h
index 45419fa..66d888c 100644
--- a/chrome/browser/resource_dispatcher_host.h
+++ b/chrome/browser/resource_dispatcher_host.h
@@ -500,6 +500,11 @@ class ResourceDispatcherHost : public URLRequest::Delegate {
// reset to 0 right before returning from RemovePendingRequest(iter).
int removing_pending_request_;
+ // A member added temporarily for debugging issue 4749. Initialized to NULL.
+ // Set to iter->second upon entering RemovePendingRequest(iter) and reset to
+ // NULL right before returning from RemovePendingRequest(iter).
+ URLRequest* request_to_remove_;
+
DISALLOW_EVIL_CONSTRUCTORS(ResourceDispatcherHost);
};