| Index: net/spdy/spdy_session.cc
|
| diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
|
| index cdd71dcaf54ac7c1ac3f3b59440cd680d82d2d75..0543c89f79e73d213fb204ec040fe1fef8001544 100644
|
| --- a/net/spdy/spdy_session.cc
|
| +++ b/net/spdy/spdy_session.cc
|
| @@ -332,6 +332,7 @@ net::Error SpdySession::InitializeWithSocket(
|
|
|
| state_ = CONNECTED;
|
| connection_.reset(connection);
|
| + connection_->AddLayeredPool(this);
|
| is_secure_ = is_secure;
|
| certificate_error_code_ = certificate_error_code;
|
|
|
| @@ -980,6 +981,15 @@ int SpdySession::GetLocalAddress(IPEndPoint* address) const {
|
| return connection_->socket()->GetLocalAddress(address);
|
| }
|
|
|
| +bool SpdySession::CloseOneIdleConnection() {
|
| + if (num_active_streams() == 0) {
|
| + // Should delete this.
|
| + RemoveFromPool();
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| void SpdySession::ActivateStream(SpdyStream* stream) {
|
| const spdy::SpdyStreamId id = stream->stream_id();
|
| DCHECK(!IsStreamActive(id));
|
| @@ -1014,12 +1024,18 @@ void SpdySession::DeleteStream(spdy::SpdyStreamId id, int status) {
|
| if (stream)
|
| stream->OnClose(status);
|
| ProcessPendingCreateStreams();
|
| + if (num_active_streams() == 0 && connection_->is_initialized() &&
|
| + connection_->IsPoolStalled()) {
|
| + // Should delete this.
|
| + RemoveFromPool();
|
| + }
|
| }
|
|
|
| void SpdySession::RemoveFromPool() {
|
| if (spdy_session_pool_) {
|
| - spdy_session_pool_->Remove(make_scoped_refptr(this));
|
| + SpdySessionPool* pool = spdy_session_pool_;
|
| spdy_session_pool_ = NULL;
|
| + pool->Remove(make_scoped_refptr(this));
|
| }
|
| }
|
|
|
|
|