Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Side by Side Diff: net/dns/host_resolver_impl.cc

Issue 2389613002: Remove stl_util's deletion functions from net/dns/. (Closed)
Patch Set: rebase atop NDK fix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/dns/host_resolver_impl.h" 5 #include "net/dns/host_resolver_impl.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <Winsock2.h> 8 #include <Winsock2.h>
9 #elif defined(OS_POSIX) 9 #elif defined(OS_POSIX)
10 #include <netdb.h> 10 #include <netdb.h>
(...skipping 12 matching lines...) Expand all
23 #include "base/debug/debugger.h" 23 #include "base/debug/debugger.h"
24 #include "base/debug/leak_annotations.h" 24 #include "base/debug/leak_annotations.h"
25 #include "base/debug/stack_trace.h" 25 #include "base/debug/stack_trace.h"
26 #include "base/macros.h" 26 #include "base/macros.h"
27 #include "base/memory/ptr_util.h" 27 #include "base/memory/ptr_util.h"
28 #include "base/metrics/field_trial.h" 28 #include "base/metrics/field_trial.h"
29 #include "base/metrics/histogram_macros.h" 29 #include "base/metrics/histogram_macros.h"
30 #include "base/metrics/sparse_histogram.h" 30 #include "base/metrics/sparse_histogram.h"
31 #include "base/profiler/scoped_tracker.h" 31 #include "base/profiler/scoped_tracker.h"
32 #include "base/single_thread_task_runner.h" 32 #include "base/single_thread_task_runner.h"
33 #include "base/stl_util.h"
34 #include "base/strings/string_util.h" 33 #include "base/strings/string_util.h"
35 #include "base/strings/utf_string_conversions.h" 34 #include "base/strings/utf_string_conversions.h"
36 #include "base/threading/thread_task_runner_handle.h" 35 #include "base/threading/thread_task_runner_handle.h"
37 #include "base/threading/worker_pool.h" 36 #include "base/threading/worker_pool.h"
38 #include "base/time/time.h" 37 #include "base/time/time.h"
39 #include "base/trace_event/trace_event.h" 38 #include "base/trace_event/trace_event.h"
40 #include "base/values.h" 39 #include "base/values.h"
41 #include "net/base/address_family.h" 40 #include "net/base/address_family.h"
42 #include "net/base/address_list.h" 41 #include "net/base/address_list.h"
43 #include "net/base/host_port_pair.h" 42 #include "net/base/host_port_pair.h"
(...skipping 1844 matching lines...) Expand 10 before | Expand all | Expand 10 after
1888 1887
1889 HostResolverImpl::HostResolverImpl(const Options& options, NetLog* net_log) 1888 HostResolverImpl::HostResolverImpl(const Options& options, NetLog* net_log)
1890 : HostResolverImpl( 1889 : HostResolverImpl(
1891 options, 1890 options,
1892 net_log, 1891 net_log,
1893 base::WorkerPool::GetTaskRunner(true /* task_is_slow */)) {} 1892 base::WorkerPool::GetTaskRunner(true /* task_is_slow */)) {}
1894 1893
1895 HostResolverImpl::~HostResolverImpl() { 1894 HostResolverImpl::~HostResolverImpl() {
1896 // Prevent the dispatcher from starting new jobs. 1895 // Prevent the dispatcher from starting new jobs.
1897 dispatcher_->SetLimitsToZero(); 1896 dispatcher_->SetLimitsToZero();
1898 // It's now safe for Jobs to call KillDsnTask on destruction, because 1897 // It's now safe for Jobs to call KillDnsTask on destruction, because
1899 // OnJobComplete will not start any new jobs. 1898 // OnJobComplete will not start any new jobs.
1900 base::STLDeleteValues(&jobs_); 1899 jobs_.clear();
1901 1900
1902 NetworkChangeNotifier::RemoveIPAddressObserver(this); 1901 NetworkChangeNotifier::RemoveIPAddressObserver(this);
1903 NetworkChangeNotifier::RemoveConnectionTypeObserver(this); 1902 NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
1904 NetworkChangeNotifier::RemoveDNSObserver(this); 1903 NetworkChangeNotifier::RemoveDNSObserver(this);
1905 } 1904 }
1906 1905
1907 void HostResolverImpl::SetMaxQueuedJobs(size_t value) { 1906 void HostResolverImpl::SetMaxQueuedJobs(size_t value) {
1908 DCHECK_EQ(0u, dispatcher_->num_queued_jobs()); 1907 DCHECK_EQ(0u, dispatcher_->num_queued_jobs());
1909 DCHECK_GT(value, 0u); 1908 DCHECK_GT(value, 0u);
1910 max_queued_jobs_ = value; 1909 max_queued_jobs_ = value;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 if (dispatcher_->num_queued_jobs() > max_queued_jobs_) { 1958 if (dispatcher_->num_queued_jobs() > max_queued_jobs_) {
1960 Job* evicted = static_cast<Job*>(dispatcher_->EvictOldestLowest()); 1959 Job* evicted = static_cast<Job*>(dispatcher_->EvictOldestLowest());
1961 DCHECK(evicted); 1960 DCHECK(evicted);
1962 evicted->OnEvicted(); // Deletes |evicted|. 1961 evicted->OnEvicted(); // Deletes |evicted|.
1963 if (evicted == job) { 1962 if (evicted == job) {
1964 rv = ERR_HOST_RESOLVER_QUEUE_TOO_LARGE; 1963 rv = ERR_HOST_RESOLVER_QUEUE_TOO_LARGE;
1965 LogFinishRequest(source_net_log, info, rv); 1964 LogFinishRequest(source_net_log, info, rv);
1966 return rv; 1965 return rv;
1967 } 1966 }
1968 } 1967 }
1969 jobs_.insert(jobit, std::make_pair(key, job)); 1968 jobs_.insert(jobit, std::make_pair(key, base::WrapUnique(job)));
1970 } else { 1969 } else {
1971 job = jobit->second; 1970 job = jobit->second.get();
1972 } 1971 }
1973 1972
1974 // Can't complete synchronously. Create and attach request. 1973 // Can't complete synchronously. Create and attach request.
1975 std::unique_ptr<RequestImpl> req(new RequestImpl( 1974 std::unique_ptr<RequestImpl> req(new RequestImpl(
1976 source_net_log, info, priority, callback, addresses, job)); 1975 source_net_log, info, priority, callback, addresses, job));
1977 job->AddRequest(req.get()); 1976 job->AddRequest(req.get());
1978 *out_req = std::move(req); 1977 *out_req = std::move(req);
1979 1978
1980 // Completion happens during Job::CompleteRequests(). 1979 // Completion happens during Job::CompleteRequests().
1981 return ERR_IO_PENDING; 1980 return ERR_IO_PENDING;
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
2296 void HostResolverImpl::CacheResult(const Key& key, 2295 void HostResolverImpl::CacheResult(const Key& key,
2297 const HostCache::Entry& entry, 2296 const HostCache::Entry& entry,
2298 base::TimeDelta ttl) { 2297 base::TimeDelta ttl) {
2299 if (cache_.get()) 2298 if (cache_.get())
2300 cache_->Set(key, entry, base::TimeTicks::Now(), ttl); 2299 cache_->Set(key, entry, base::TimeTicks::Now(), ttl);
2301 } 2300 }
2302 2301
2303 void HostResolverImpl::RemoveJob(Job* job) { 2302 void HostResolverImpl::RemoveJob(Job* job) {
2304 DCHECK(job); 2303 DCHECK(job);
2305 JobMap::iterator it = jobs_.find(job->key()); 2304 JobMap::iterator it = jobs_.find(job->key());
2306 if (it != jobs_.end() && it->second == job) 2305 if (it != jobs_.end() && it->second.get() == job) {
2306 it->second.release();
2307 jobs_.erase(it); 2307 jobs_.erase(it);
2308 }
2308 } 2309 }
2309 2310
2310 HostResolverImpl::Key HostResolverImpl::GetEffectiveKeyForRequest( 2311 HostResolverImpl::Key HostResolverImpl::GetEffectiveKeyForRequest(
2311 const RequestInfo& info, 2312 const RequestInfo& info,
2312 const IPAddress* ip_address, 2313 const IPAddress* ip_address,
2313 const NetLogWithSource& net_log) { 2314 const NetLogWithSource& net_log) {
2314 HostResolverFlags effective_flags = 2315 HostResolverFlags effective_flags =
2315 info.host_resolver_flags() | additional_resolver_flags_; 2316 info.host_resolver_flags() | additional_resolver_flags_;
2316 AddressFamily effective_address_family = info.address_family(); 2317 AddressFamily effective_address_family = info.address_family();
2317 2318
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2352 void HostResolverImpl::RunLoopbackProbeJob() { 2353 void HostResolverImpl::RunLoopbackProbeJob() {
2353 new LoopbackProbeJob(weak_ptr_factory_.GetWeakPtr(), 2354 new LoopbackProbeJob(weak_ptr_factory_.GetWeakPtr(),
2354 worker_task_runner_.get()); 2355 worker_task_runner_.get());
2355 } 2356 }
2356 2357
2357 void HostResolverImpl::AbortAllInProgressJobs() { 2358 void HostResolverImpl::AbortAllInProgressJobs() {
2358 // In Abort, a Request callback could spawn new Jobs with matching keys, so 2359 // In Abort, a Request callback could spawn new Jobs with matching keys, so
2359 // first collect and remove all running jobs from |jobs_|. 2360 // first collect and remove all running jobs from |jobs_|.
2360 std::vector<std::unique_ptr<Job>> jobs_to_abort; 2361 std::vector<std::unique_ptr<Job>> jobs_to_abort;
2361 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ) { 2362 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ) {
2362 Job* job = it->second; 2363 Job* job = it->second.get();
2363 if (job->is_running()) { 2364 if (job->is_running()) {
2364 jobs_to_abort.push_back(base::WrapUnique(job)); 2365 jobs_to_abort.push_back(std::move(it->second));
2365 jobs_.erase(it++); 2366 jobs_.erase(it++);
2366 } else { 2367 } else {
2367 DCHECK(job->is_queued()); 2368 DCHECK(job->is_queued());
2368 ++it; 2369 ++it;
2369 } 2370 }
2370 } 2371 }
2371 2372
2372 // Pause the dispatcher so it won't start any new dispatcher jobs while 2373 // Pause the dispatcher so it won't start any new dispatcher jobs while
2373 // aborting the old ones. This is needed so that it won't start the second 2374 // aborting the old ones. This is needed so that it won't start the second
2374 // DnsTransaction for a job in |jobs_to_abort| if the DnsConfig just became 2375 // DnsTransaction for a job in |jobs_to_abort| if the DnsConfig just became
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2407 if (!HaveDnsConfig()) 2408 if (!HaveDnsConfig())
2408 return; 2409 return;
2409 2410
2410 // TODO(szym): Do not do this if nsswitch.conf instructs not to. 2411 // TODO(szym): Do not do this if nsswitch.conf instructs not to.
2411 // http://crbug.com/117655 2412 // http://crbug.com/117655
2412 2413
2413 // Life check to bail once |this| is deleted. 2414 // Life check to bail once |this| is deleted.
2414 base::WeakPtr<HostResolverImpl> self = weak_ptr_factory_.GetWeakPtr(); 2415 base::WeakPtr<HostResolverImpl> self = weak_ptr_factory_.GetWeakPtr();
2415 2416
2416 for (JobMap::iterator it = jobs_.begin(); self.get() && it != jobs_.end();) { 2417 for (JobMap::iterator it = jobs_.begin(); self.get() && it != jobs_.end();) {
2417 Job* job = it->second; 2418 Job* job = it->second.get();
2418 ++it; 2419 ++it;
2419 // This could remove |job| from |jobs_|, but iterator will remain valid. 2420 // This could remove |job| from |jobs_|, but iterator will remain valid.
2420 job->ServeFromHosts(); 2421 job->ServeFromHosts();
2421 } 2422 }
2422 } 2423 }
2423 2424
2424 void HostResolverImpl::OnIPAddressChanged() { 2425 void HostResolverImpl::OnIPAddressChanged() {
2425 resolved_known_ipv6_hostname_ = false; 2426 resolved_known_ipv6_hostname_ = false;
2426 last_ipv6_probe_time_ = base::TimeTicks(); 2427 last_ipv6_probe_time_ = base::TimeTicks();
2427 // Abandon all ProbeJobs. 2428 // Abandon all ProbeJobs.
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
2609 if (job_) 2610 if (job_)
2610 job_->CancelRequest(this); 2611 job_->CancelRequest(this);
2611 } 2612 }
2612 2613
2613 void HostResolverImpl::RequestImpl::ChangeRequestPriority( 2614 void HostResolverImpl::RequestImpl::ChangeRequestPriority(
2614 RequestPriority priority) { 2615 RequestPriority priority) {
2615 job_->ChangeRequestPriority(this, priority); 2616 job_->ChangeRequestPriority(this, priority);
2616 } 2617 }
2617 2618
2618 } // namespace net 2619 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698