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

Side by Side Diff: net/spdy/chromium/spdy_session_pool.cc

Issue 2932513004: Throttle HttpStreamFactoryImpl::Job to HTTP/2-supported servers (Closed)
Patch Set: self Created 3 years, 6 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
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/spdy/chromium/spdy_session_pool.h" 5 #include "net/spdy/chromium/spdy_session_pool.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 direct || request->url().SchemeIs(url::kHttpsScheme); 431 direct || request->url().SchemeIs(url::kHttpsScheme);
432 request->OnStreamReady( 432 request->OnStreamReady(
433 used_ssl_config, used_proxy_info, 433 used_ssl_config, used_proxy_info,
434 base::MakeUnique<SpdyHttpStream>(spdy_session, use_relative_url, 434 base::MakeUnique<SpdyHttpStream>(spdy_session, use_relative_url,
435 source_dependency)); 435 source_dependency));
436 } 436 }
437 } 437 }
438 // TODO(mbelshe): Alert other valid requests. 438 // TODO(mbelshe): Alert other valid requests.
439 } 439 }
440 440
441 bool SpdySessionPool::StartRequest(const SpdySessionKey& spdy_session_key,
442 const base::Closure& callback) {
443 auto iter = spdy_session_pending_request_map_.find(spdy_session_key);
444 if (iter == spdy_session_pending_request_map_.end()) {
445 spdy_session_pending_request_map_.emplace(spdy_session_key,
446 std::list<base::Closure>{});
447 return true;
448 }
449 iter->second.push_back(callback);
450 return false;
451 }
452
453 void SpdySessionPool::ResumeAllPendingRequests(
454 const SpdySessionKey& spdy_session_key) {
455 auto iter = spdy_session_pending_request_map_.find(spdy_session_key);
456 if (iter != spdy_session_pending_request_map_.end()) {
457 for (auto callback : iter->second) {
458 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
459 }
460 spdy_session_pending_request_map_.erase(iter);
461 }
462 }
463
464 void SpdySessionPool::ResumeNextPendingRequest(
465 const SpdySessionKey& spdy_session_key) {
466 auto iter = spdy_session_pending_request_map_.find(spdy_session_key);
467 if (iter != spdy_session_pending_request_map_.end()) {
468 base::Closure callback = iter->second.front();
469 if (iter->second.size() == 1)
470 spdy_session_pending_request_map_.erase(iter);
471 iter->second.pop_front();
Bence 2017/06/09 19:17:39 Do not dereference |iter| after it's erased. How
xunjieli 2017/06/13 15:23:11 Done. Thanks!
472 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
473 }
474 }
475
441 void SpdySessionPool::AddRequestToSpdySessionRequestMap( 476 void SpdySessionPool::AddRequestToSpdySessionRequestMap(
442 const SpdySessionKey& spdy_session_key, 477 const SpdySessionKey& spdy_session_key,
443 HttpStreamFactoryImpl::Request* request) { 478 HttpStreamFactoryImpl::Request* request) {
444 if (request->HasSpdySessionKey()) 479 if (request->HasSpdySessionKey())
445 return; 480 return;
446 RequestSet& request_set = spdy_session_request_map_[spdy_session_key]; 481 RequestSet& request_set = spdy_session_request_map_[spdy_session_key];
447 DCHECK(!base::ContainsKey(request_set, request)); 482 DCHECK(!base::ContainsKey(request_set, request));
448 request_set.insert(request); 483 request_set.insert(request);
449 request->SetSpdySessionKey(spdy_session_key); 484 request->SetSpdySessionKey(spdy_session_key);
450 } 485 }
451 486
452 void SpdySessionPool::RemoveRequestFromSpdySessionRequestMap( 487 void SpdySessionPool::RemoveRequestFromSpdySessionRequestMap(
453 HttpStreamFactoryImpl::Request* request) { 488 HttpStreamFactoryImpl::Request* request) {
454 if (!request->HasSpdySessionKey()) 489 if (!request->HasSpdySessionKey())
455 return; 490 return;
456 const SpdySessionKey& spdy_session_key = request->GetSpdySessionKey(); 491 const SpdySessionKey& spdy_session_key = request->GetSpdySessionKey();
457 auto iter = spdy_session_request_map_.find(spdy_session_key); 492 auto iter = spdy_session_request_map_.find(spdy_session_key);
458 DCHECK(iter != spdy_session_request_map_.end()); 493 DCHECK(iter != spdy_session_request_map_.end());
459 RequestSet& request_set = iter->second; 494 RequestSet& request_set = iter->second;
460 DCHECK(base::ContainsKey(request_set, request)); 495 DCHECK(base::ContainsKey(request_set, request));
461 request_set.erase(request); 496 request_set.erase(request);
462 if (request_set.empty()) 497 if (request_set.empty())
463 spdy_session_request_map_.erase(spdy_session_key); 498 spdy_session_request_map_.erase(spdy_session_key);
464 request->ResetSpdySessionKey(); 499 request->ResetSpdySessionKey();
500 ResumeNextPendingRequest(spdy_session_key);
465 } 501 }
466 502
467 void SpdySessionPool::DumpMemoryStats( 503 void SpdySessionPool::DumpMemoryStats(
468 base::trace_event::ProcessMemoryDump* pmd, 504 base::trace_event::ProcessMemoryDump* pmd,
469 const SpdyString& parent_dump_absolute_name) const { 505 const SpdyString& parent_dump_absolute_name) const {
470 if (sessions_.empty()) 506 if (sessions_.empty())
471 return; 507 return;
472 size_t total_size = 0; 508 size_t total_size = 0;
473 size_t buffer_size = 0; 509 size_t buffer_size = 0;
474 size_t cert_count = 0; 510 size_t cert_count = 0;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 610
575 if (idle_only && (*it)->is_active()) 611 if (idle_only && (*it)->is_active())
576 continue; 612 continue;
577 613
578 (*it)->CloseSessionOnError(error, description); 614 (*it)->CloseSessionOnError(error, description);
579 DCHECK(!IsSessionAvailable(*it)); 615 DCHECK(!IsSessionAvailable(*it));
580 } 616 }
581 } 617 }
582 618
583 } // namespace net 619 } // namespace net
OLDNEW
« net/spdy/chromium/spdy_session_pool.h ('K') | « net/spdy/chromium/spdy_session_pool.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698