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

Side by Side Diff: net/socket/client_socket_pool_base.cc

Issue 2229393003: net: Use stl utilities from the base namespace (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 4 months 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
« no previous file with comments | « net/server/http_server.cc ('k') | net/socket/client_socket_pool_manager_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/socket/client_socket_pool_base.h" 5 #include "net/socket/client_socket_pool_base.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 it != group_map_.end(); ++it) { 233 it != group_map_.end(); ++it) {
234 if (it->second->CanUseAdditionalSocketSlot(max_sockets_per_group_)) 234 if (it->second->CanUseAdditionalSocketSlot(max_sockets_per_group_))
235 return true; 235 return true;
236 } 236 }
237 return false; 237 return false;
238 } 238 }
239 239
240 void ClientSocketPoolBaseHelper::AddLowerLayeredPool( 240 void ClientSocketPoolBaseHelper::AddLowerLayeredPool(
241 LowerLayeredPool* lower_pool) { 241 LowerLayeredPool* lower_pool) {
242 DCHECK(pool_); 242 DCHECK(pool_);
243 CHECK(!ContainsKey(lower_pools_, lower_pool)); 243 CHECK(!base::ContainsKey(lower_pools_, lower_pool));
244 lower_pools_.insert(lower_pool); 244 lower_pools_.insert(lower_pool);
245 lower_pool->AddHigherLayeredPool(pool_); 245 lower_pool->AddHigherLayeredPool(pool_);
246 } 246 }
247 247
248 void ClientSocketPoolBaseHelper::AddHigherLayeredPool( 248 void ClientSocketPoolBaseHelper::AddHigherLayeredPool(
249 HigherLayeredPool* higher_pool) { 249 HigherLayeredPool* higher_pool) {
250 CHECK(higher_pool); 250 CHECK(higher_pool);
251 CHECK(!ContainsKey(higher_pools_, higher_pool)); 251 CHECK(!base::ContainsKey(higher_pools_, higher_pool));
252 higher_pools_.insert(higher_pool); 252 higher_pools_.insert(higher_pool);
253 } 253 }
254 254
255 void ClientSocketPoolBaseHelper::RemoveHigherLayeredPool( 255 void ClientSocketPoolBaseHelper::RemoveHigherLayeredPool(
256 HigherLayeredPool* higher_pool) { 256 HigherLayeredPool* higher_pool) {
257 CHECK(higher_pool); 257 CHECK(higher_pool);
258 CHECK(ContainsKey(higher_pools_, higher_pool)); 258 CHECK(base::ContainsKey(higher_pools_, higher_pool));
259 higher_pools_.erase(higher_pool); 259 higher_pools_.erase(higher_pool);
260 } 260 }
261 261
262 int ClientSocketPoolBaseHelper::RequestSocket( 262 int ClientSocketPoolBaseHelper::RequestSocket(
263 const std::string& group_name, 263 const std::string& group_name,
264 std::unique_ptr<const Request> request) { 264 std::unique_ptr<const Request> request) {
265 CHECK(!request->callback().is_null()); 265 CHECK(!request->callback().is_null());
266 CHECK(request->handle()); 266 CHECK(request->handle());
267 267
268 // Cleanup any timed-out idle sockets. 268 // Cleanup any timed-out idle sockets.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 // RequestSocketsInternal() may delete the group. 315 // RequestSocketsInternal() may delete the group.
316 bool deleted_group = false; 316 bool deleted_group = false;
317 317
318 int rv = OK; 318 int rv = OK;
319 for (int num_iterations_left = num_sockets; 319 for (int num_iterations_left = num_sockets;
320 group->NumActiveSocketSlots() < num_sockets && 320 group->NumActiveSocketSlots() < num_sockets &&
321 num_iterations_left > 0 ; num_iterations_left--) { 321 num_iterations_left > 0 ; num_iterations_left--) {
322 rv = RequestSocketInternal(group_name, request); 322 rv = RequestSocketInternal(group_name, request);
323 if (rv < 0 && rv != ERR_IO_PENDING) { 323 if (rv < 0 && rv != ERR_IO_PENDING) {
324 // We're encountering a synchronous error. Give up. 324 // We're encountering a synchronous error. Give up.
325 if (!ContainsKey(group_map_, group_name)) 325 if (!base::ContainsKey(group_map_, group_name))
326 deleted_group = true; 326 deleted_group = true;
327 break; 327 break;
328 } 328 }
329 if (!ContainsKey(group_map_, group_name)) { 329 if (!base::ContainsKey(group_map_, group_name)) {
330 // Unexpected. The group should only be getting deleted on synchronous 330 // Unexpected. The group should only be getting deleted on synchronous
331 // error. 331 // error.
332 NOTREACHED(); 332 NOTREACHED();
333 deleted_group = true; 333 deleted_group = true;
334 break; 334 break;
335 } 335 }
336 } 336 }
337 337
338 if (!deleted_group && group->IsEmpty()) 338 if (!deleted_group && group->IsEmpty())
339 RemoveGroup(group_name); 339 RemoveGroup(group_name);
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 pending_callback_map_.erase(callback_it); 515 pending_callback_map_.erase(callback_it);
516 std::unique_ptr<StreamSocket> socket = handle->PassSocket(); 516 std::unique_ptr<StreamSocket> socket = handle->PassSocket();
517 if (socket) { 517 if (socket) {
518 if (result != OK) 518 if (result != OK)
519 socket->Disconnect(); 519 socket->Disconnect();
520 ReleaseSocket(handle->group_name(), std::move(socket), handle->id()); 520 ReleaseSocket(handle->group_name(), std::move(socket), handle->id());
521 } 521 }
522 return; 522 return;
523 } 523 }
524 524
525 CHECK(ContainsKey(group_map_, group_name)); 525 CHECK(base::ContainsKey(group_map_, group_name));
526 526
527 Group* group = GetOrCreateGroup(group_name); 527 Group* group = GetOrCreateGroup(group_name);
528 528
529 // Search pending_requests for matching handle. 529 // Search pending_requests for matching handle.
530 std::unique_ptr<const Request> request = 530 std::unique_ptr<const Request> request =
531 group->FindAndRemovePendingRequest(handle); 531 group->FindAndRemovePendingRequest(handle);
532 if (request) { 532 if (request) {
533 request->net_log().AddEvent(NetLog::TYPE_CANCELLED); 533 request->net_log().AddEvent(NetLog::TYPE_CANCELLED);
534 request->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL); 534 request->net_log().EndEvent(NetLog::TYPE_SOCKET_POOL);
535 535
536 // We let the job run, unless we're at the socket limit and there is 536 // We let the job run, unless we're at the socket limit and there is
537 // not another request waiting on the job. 537 // not another request waiting on the job.
538 if (group->jobs().size() > group->pending_request_count() && 538 if (group->jobs().size() > group->pending_request_count() &&
539 ReachedMaxSocketsLimit()) { 539 ReachedMaxSocketsLimit()) {
540 RemoveConnectJob(*group->jobs().begin(), group); 540 RemoveConnectJob(*group->jobs().begin(), group);
541 CheckForStalledSocketGroups(); 541 CheckForStalledSocketGroups();
542 } 542 }
543 } 543 }
544 } 544 }
545 545
546 bool ClientSocketPoolBaseHelper::HasGroup(const std::string& group_name) const { 546 bool ClientSocketPoolBaseHelper::HasGroup(const std::string& group_name) const {
547 return ContainsKey(group_map_, group_name); 547 return base::ContainsKey(group_map_, group_name);
548 } 548 }
549 549
550 void ClientSocketPoolBaseHelper::CloseIdleSockets() { 550 void ClientSocketPoolBaseHelper::CloseIdleSockets() {
551 CleanupIdleSockets(true); 551 CleanupIdleSockets(true);
552 DCHECK_EQ(0, idle_socket_count_); 552 DCHECK_EQ(0, idle_socket_count_);
553 } 553 }
554 554
555 int ClientSocketPoolBaseHelper::IdleSocketCountInGroup( 555 int ClientSocketPoolBaseHelper::IdleSocketCountInGroup(
556 const std::string& group_name) const { 556 const std::string& group_name) const {
557 GroupMap::const_iterator i = group_map_.find(group_name); 557 GroupMap::const_iterator i = group_map_.find(group_name);
558 CHECK(i != group_map_.end()); 558 CHECK(i != group_map_.end());
559 559
560 return i->second->idle_sockets().size(); 560 return i->second->idle_sockets().size();
561 } 561 }
562 562
563 LoadState ClientSocketPoolBaseHelper::GetLoadState( 563 LoadState ClientSocketPoolBaseHelper::GetLoadState(
564 const std::string& group_name, 564 const std::string& group_name,
565 const ClientSocketHandle* handle) const { 565 const ClientSocketHandle* handle) const {
566 if (ContainsKey(pending_callback_map_, handle)) 566 if (base::ContainsKey(pending_callback_map_, handle))
567 return LOAD_STATE_CONNECTING; 567 return LOAD_STATE_CONNECTING;
568 568
569 GroupMap::const_iterator group_it = group_map_.find(group_name); 569 GroupMap::const_iterator group_it = group_map_.find(group_name);
570 if (group_it == group_map_.end()) { 570 if (group_it == group_map_.end()) {
571 // TODO(mmenke): This is actually reached in the wild, for unknown reasons. 571 // TODO(mmenke): This is actually reached in the wild, for unknown reasons.
572 // Would be great to understand why, and if it's a bug, fix it. If not, 572 // Would be great to understand why, and if it's a bug, fix it. If not,
573 // should have a test for that case. 573 // should have a test for that case.
574 NOTREACHED(); 574 NOTREACHED();
575 return LOAD_STATE_IDLE; 575 return LOAD_STATE_IDLE;
576 } 576 }
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 Group* group) { 921 Group* group) {
922 CHECK_GT(connecting_socket_count_, 0); 922 CHECK_GT(connecting_socket_count_, 0);
923 connecting_socket_count_--; 923 connecting_socket_count_--;
924 924
925 DCHECK(group); 925 DCHECK(group);
926 group->RemoveJob(job); 926 group->RemoveJob(job);
927 } 927 }
928 928
929 void ClientSocketPoolBaseHelper::OnAvailableSocketSlot( 929 void ClientSocketPoolBaseHelper::OnAvailableSocketSlot(
930 const std::string& group_name, Group* group) { 930 const std::string& group_name, Group* group) {
931 DCHECK(ContainsKey(group_map_, group_name)); 931 DCHECK(base::ContainsKey(group_map_, group_name));
932 if (group->IsEmpty()) { 932 if (group->IsEmpty()) {
933 RemoveGroup(group_name); 933 RemoveGroup(group_name);
934 } else if (group->has_pending_requests()) { 934 } else if (group->has_pending_requests()) {
935 ProcessPendingRequest(group_name, group); 935 ProcessPendingRequest(group_name, group);
936 } 936 }
937 } 937 }
938 938
939 void ClientSocketPoolBaseHelper::ProcessPendingRequest( 939 void ClientSocketPoolBaseHelper::ProcessPendingRequest(
940 const std::string& group_name, Group* group) { 940 const std::string& group_name, Group* group) {
941 const Request* next_request = group->GetNextPendingRequest(); 941 const Request* next_request = group->GetNextPendingRequest();
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 for (std::set<HigherLayeredPool*>::const_iterator it = higher_pools_.begin(); 1103 for (std::set<HigherLayeredPool*>::const_iterator it = higher_pools_.begin();
1104 it != higher_pools_.end(); ++it) { 1104 it != higher_pools_.end(); ++it) {
1105 if ((*it)->CloseOneIdleConnection()) 1105 if ((*it)->CloseOneIdleConnection())
1106 return true; 1106 return true;
1107 } 1107 }
1108 return false; 1108 return false;
1109 } 1109 }
1110 1110
1111 void ClientSocketPoolBaseHelper::InvokeUserCallbackLater( 1111 void ClientSocketPoolBaseHelper::InvokeUserCallbackLater(
1112 ClientSocketHandle* handle, const CompletionCallback& callback, int rv) { 1112 ClientSocketHandle* handle, const CompletionCallback& callback, int rv) {
1113 CHECK(!ContainsKey(pending_callback_map_, handle)); 1113 CHECK(!base::ContainsKey(pending_callback_map_, handle));
1114 pending_callback_map_[handle] = CallbackResultPair(callback, rv); 1114 pending_callback_map_[handle] = CallbackResultPair(callback, rv);
1115 base::ThreadTaskRunnerHandle::Get()->PostTask( 1115 base::ThreadTaskRunnerHandle::Get()->PostTask(
1116 FROM_HERE, base::Bind(&ClientSocketPoolBaseHelper::InvokeUserCallback, 1116 FROM_HERE, base::Bind(&ClientSocketPoolBaseHelper::InvokeUserCallback,
1117 weak_factory_.GetWeakPtr(), handle)); 1117 weak_factory_.GetWeakPtr(), handle));
1118 } 1118 }
1119 1119
1120 void ClientSocketPoolBaseHelper::InvokeUserCallback( 1120 void ClientSocketPoolBaseHelper::InvokeUserCallback(
1121 ClientSocketHandle* handle) { 1121 ClientSocketHandle* handle) {
1122 PendingCallbackMap::iterator it = pending_callback_map_.find(handle); 1122 PendingCallbackMap::iterator it = pending_callback_map_.find(handle);
1123 1123
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1239 } 1239 }
1240 1240
1241 void ClientSocketPoolBaseHelper::Group::SanityCheck() { 1241 void ClientSocketPoolBaseHelper::Group::SanityCheck() {
1242 DCHECK_LE(unassigned_job_count_, jobs_.size()); 1242 DCHECK_LE(unassigned_job_count_, jobs_.size());
1243 } 1243 }
1244 1244
1245 void ClientSocketPoolBaseHelper::Group::RemoveAllJobs() { 1245 void ClientSocketPoolBaseHelper::Group::RemoveAllJobs() {
1246 SanityCheck(); 1246 SanityCheck();
1247 1247
1248 // Delete active jobs. 1248 // Delete active jobs.
1249 STLDeleteElements(&jobs_); 1249 base::STLDeleteElements(&jobs_);
1250 unassigned_job_count_ = 0; 1250 unassigned_job_count_ = 0;
1251 1251
1252 // Stop backup job timer. 1252 // Stop backup job timer.
1253 backup_job_timer_.Stop(); 1253 backup_job_timer_.Stop();
1254 } 1254 }
1255 1255
1256 const ClientSocketPoolBaseHelper::Request* 1256 const ClientSocketPoolBaseHelper::Request*
1257 ClientSocketPoolBaseHelper::Group::GetNextPendingRequest() const { 1257 ClientSocketPoolBaseHelper::Group::GetNextPendingRequest() const {
1258 return 1258 return
1259 pending_requests_.empty() ? NULL : pending_requests_.FirstMax().value(); 1259 pending_requests_.empty() ? NULL : pending_requests_.FirstMax().value();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 // If there are no more requests, kill the backup timer. 1320 // If there are no more requests, kill the backup timer.
1321 if (pending_requests_.empty()) 1321 if (pending_requests_.empty())
1322 backup_job_timer_.Stop(); 1322 backup_job_timer_.Stop();
1323 request->CrashIfInvalid(); 1323 request->CrashIfInvalid();
1324 return request; 1324 return request;
1325 } 1325 }
1326 1326
1327 } // namespace internal 1327 } // namespace internal
1328 1328
1329 } // namespace net 1329 } // namespace net
OLDNEW
« no previous file with comments | « net/server/http_server.cc ('k') | net/socket/client_socket_pool_manager_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698