| Index: net/dns/mojo_host_resolver_impl.cc
|
| diff --git a/net/dns/mojo_host_resolver_impl.cc b/net/dns/mojo_host_resolver_impl.cc
|
| index f8f08d8b249da078cd7fc61fe3f73d665e67f24f..e61387ab7404e32e5ab2048adc4b573c848a4efd 100644
|
| --- a/net/dns/mojo_host_resolver_impl.cc
|
| +++ b/net/dns/mojo_host_resolver_impl.cc
|
| @@ -6,7 +6,6 @@
|
|
|
| #include <utility>
|
|
|
| -#include "base/stl_util.h"
|
| #include "net/base/address_list.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/base/network_interfaces.h"
|
| @@ -26,6 +25,8 @@ class MojoHostResolverImpl::Job {
|
| interfaces::HostResolverRequestClientPtr client);
|
| ~Job();
|
|
|
| + void set_iter(std::list<Job>::iterator iter) { iter_ = iter; }
|
| +
|
| void Start();
|
|
|
| private:
|
| @@ -36,6 +37,9 @@ class MojoHostResolverImpl::Job {
|
| void OnConnectionError();
|
|
|
| MojoHostResolverImpl* resolver_service_;
|
| + // This Job's iterator in |resolver_service_|, so the Job may be removed on
|
| + // completion.
|
| + std::list<Job>::iterator iter_;
|
| net::HostResolver* resolver_;
|
| net::HostResolver::RequestInfo request_info_;
|
| const NetLogWithSource net_log_;
|
| @@ -51,7 +55,6 @@ MojoHostResolverImpl::MojoHostResolverImpl(net::HostResolver* resolver,
|
|
|
| MojoHostResolverImpl::~MojoHostResolverImpl() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - base::STLDeleteElements(&pending_jobs_);
|
| }
|
|
|
| void MojoHostResolverImpl::Resolve(
|
| @@ -64,17 +67,17 @@ void MojoHostResolverImpl::Resolve(
|
| // IP address.
|
| request_info->set_host_port_pair(HostPortPair(GetHostName(), 80));
|
| }
|
| - Job* job =
|
| - new Job(this, resolver_, *request_info, net_log_, std::move(client));
|
| - pending_jobs_.insert(job);
|
| +
|
| + pending_jobs_.emplace_front(this, resolver_, *request_info, net_log_,
|
| + std::move(client));
|
| + auto job = pending_jobs_.begin();
|
| + job->set_iter(job);
|
| job->Start();
|
| }
|
|
|
| -void MojoHostResolverImpl::DeleteJob(Job* job) {
|
| +void MojoHostResolverImpl::DeleteJob(std::list<Job>::iterator job) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - size_t num_erased = pending_jobs_.erase(job);
|
| - DCHECK(num_erased);
|
| - delete job;
|
| + pending_jobs_.erase(job);
|
| }
|
|
|
| MojoHostResolverImpl::Job::Job(
|
| @@ -93,6 +96,9 @@ MojoHostResolverImpl::Job::Job(
|
| }
|
|
|
| void MojoHostResolverImpl::Job::Start() {
|
| + // The caller is responsible for setting up |iter_|.
|
| + DCHECK_EQ(this, &*iter_);
|
| +
|
| DVLOG(1) << "Resolve " << request_info_.host_port_pair().ToString();
|
| int result =
|
| resolver_->Resolve(request_info_, DEFAULT_PRIORITY, &result_,
|
| @@ -117,7 +123,7 @@ void MojoHostResolverImpl::Job::OnResolveDone(int result) {
|
| DVLOG(1) << address.ToString();
|
| }
|
| client_->ReportResult(result, result_);
|
| - resolver_service_->DeleteJob(this);
|
| + resolver_service_->DeleteJob(iter_);
|
| }
|
|
|
| void MojoHostResolverImpl::Job::OnConnectionError() {
|
| @@ -126,7 +132,7 @@ void MojoHostResolverImpl::Job::OnConnectionError() {
|
| DCHECK(resolver_service_);
|
| DVLOG(1) << "Connection error on request for "
|
| << request_info_.host_port_pair().ToString();
|
| - resolver_service_->DeleteJob(this);
|
| + resolver_service_->DeleteJob(iter_);
|
| }
|
|
|
| } // namespace net
|
|
|