diff options
author | wtc@google.com <wtc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 22:30:18 +0000 |
---|---|---|
committer | wtc@google.com <wtc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-12-10 22:30:18 +0000 |
commit | 834e1940adac0d36fa796b0bea95e39eb03bae4e (patch) | |
tree | 5221cfff62a99a39f8661770b0f2d130b8a26b8d /chrome/browser | |
parent | 4b4d1adc53b7e016b7966a38c48a31ec9e0aeda2 (diff) | |
download | chromium_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.cc | 20 | ||||
-rw-r--r-- | chrome/browser/resource_dispatcher_host.h | 5 |
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); }; |