| Index: net/spdy/spdy_session.cc
|
| ===================================================================
|
| --- net/spdy/spdy_session.cc (revision 113254)
|
| +++ net/spdy/spdy_session.cc (working copy)
|
| @@ -332,6 +332,7 @@
|
|
|
| state_ = CONNECTED;
|
| connection_.reset(connection);
|
| + connection_->AddLayeredPool(this);
|
| is_secure_ = is_secure;
|
| certificate_error_code_ = certificate_error_code;
|
|
|
| @@ -980,6 +981,15 @@
|
| 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 @@
|
| 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));
|
| }
|
| }
|
|
|
|
|