summaryrefslogtreecommitdiffstats
path: root/net/socket/client_socket_handle.cc
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-22 23:41:52 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-22 23:41:52 +0000
commit043b68c80a7643136fa85a80e6079573d4d5e953 (patch)
treea40e4a49d59b3f432e28055c8e7255e53e039774 /net/socket/client_socket_handle.cc
parent31ac75da9f18c250bdab355b4a2c98cba99e08dd (diff)
downloadchromium_src-043b68c80a7643136fa85a80e6079573d4d5e953.zip
chromium_src-043b68c80a7643136fa85a80e6079573d4d5e953.tar.gz
chromium_src-043b68c80a7643136fa85a80e6079573d4d5e953.tar.bz2
When an idle socket is added back to a socket pool,
check if lower layer socket pools are stalled. If so, close the idle socket. Also, when a SPDY stream is destroyed, check if the session is idle and a lower layer pool is stalled, and close the session if needed. BUG=92244 Review URL: https://chromiumcodereview.appspot.com/18796003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219147 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/client_socket_handle.cc')
-rw-r--r--net/socket/client_socket_handle.cc34
1 files changed, 19 insertions, 15 deletions
diff --git a/net/socket/client_socket_handle.cc b/net/socket/client_socket_handle.cc
index acb896b..9687a5a 100644
--- a/net/socket/client_socket_handle.cc
+++ b/net/socket/client_socket_handle.cc
@@ -18,7 +18,7 @@ namespace net {
ClientSocketHandle::ClientSocketHandle()
: is_initialized_(false),
pool_(NULL),
- layered_pool_(NULL),
+ higher_pool_(NULL),
is_reused_(false),
callback_(base::Bind(&ClientSocketHandle::OnIOComplete,
base::Unretained(this))),
@@ -53,10 +53,8 @@ void ClientSocketHandle::ResetInternal(bool cancel) {
group_name_.clear();
is_reused_ = false;
user_callback_.Reset();
- if (layered_pool_) {
- pool_->RemoveLayeredPool(layered_pool_);
- layered_pool_ = NULL;
- }
+ if (higher_pool_)
+ RemoveHigherLayeredPool(higher_pool_);
pool_ = NULL;
idle_time_ = base::TimeDelta();
init_time_ = base::TimeTicks();
@@ -82,24 +80,30 @@ LoadState ClientSocketHandle::GetLoadState() const {
}
bool ClientSocketHandle::IsPoolStalled() const {
+ if (!pool_)
+ return false;
return pool_->IsStalled();
}
-void ClientSocketHandle::AddLayeredPool(LayeredPool* layered_pool) {
- CHECK(layered_pool);
- CHECK(!layered_pool_);
+void ClientSocketHandle::AddHigherLayeredPool(HigherLayeredPool* higher_pool) {
+ CHECK(higher_pool);
+ CHECK(!higher_pool_);
+ // TODO(mmenke): |pool_| should only be NULL in tests. Maybe stop doing that
+ // so this be be made into a DCHECK, and the same can be done in
+ // RemoveHigherLayeredPool?
if (pool_) {
- pool_->AddLayeredPool(layered_pool);
- layered_pool_ = layered_pool;
+ pool_->AddHigherLayeredPool(higher_pool);
+ higher_pool_ = higher_pool;
}
}
-void ClientSocketHandle::RemoveLayeredPool(LayeredPool* layered_pool) {
- CHECK(layered_pool);
- CHECK(layered_pool_);
+void ClientSocketHandle::RemoveHigherLayeredPool(
+ HigherLayeredPool* higher_pool) {
+ CHECK(higher_pool_);
+ CHECK_EQ(higher_pool_, higher_pool);
if (pool_) {
- pool_->RemoveLayeredPool(layered_pool);
- layered_pool_ = NULL;
+ pool_->RemoveHigherLayeredPool(higher_pool);
+ higher_pool_ = NULL;
}
}