Change ownership of |job| objects in ClientSocketPoolBaseHelper
In particular, make RemoveConnectJob() transfer ownership of its job to
Group::RemoveJob(), which will then delete it.
Also assert that the group owns that particular job.
This makes it slightly easier to convert this code to using scoped_ptrs,
which in turn makes it easier to modify ClientSocketPoolBaseHelper to
support reprioritization.
BUG=166689
[email protected]
Review URL: https://codereview.chromium.org/22999009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217661 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc
index 3332e04..4a5b1187 100644
--- a/net/socket/client_socket_pool_base.cc
+++ b/net/socket/client_socket_pool_base.cc
@@ -942,16 +942,12 @@
connecting_socket_count_--;
DCHECK(group);
- DCHECK(ContainsKey(group->jobs(), job));
group->RemoveJob(job);
// If we've got no more jobs for this group, then we no longer need a
// backup job either.
if (group->jobs().empty())
group->CleanupBackupJob();
-
- DCHECK(job);
- delete job;
}
void ClientSocketPoolBaseHelper::OnAvailableSocketSlot(
@@ -1192,9 +1188,15 @@
}
void ClientSocketPoolBaseHelper::Group::RemoveJob(ConnectJob* job) {
+ scoped_ptr<ConnectJob> owned_job(job);
SanityCheck();
- jobs_.erase(job);
+ std::set<ConnectJob*>::iterator it = jobs_.find(job);
+ if (it != jobs_.end()) {
+ jobs_.erase(it);
+ } else {
+ NOTREACHED();
+ }
size_t job_count = jobs_.size();
if (job_count < unassigned_job_count_)
unassigned_job_count_ = job_count;