| Index: net/spdy/spdy_session.cc
|
| ===================================================================
|
| --- net/spdy/spdy_session.cc (revision 218769)
|
| +++ net/spdy/spdy_session.cc (working copy)
|
| @@ -517,7 +517,7 @@
|
| error = OK;
|
| if (error == OK) {
|
| DCHECK_NE(availability_state_, STATE_CLOSED);
|
| - connection_->AddLayeredPool(this);
|
| + connection_->AddHigherLayeredPool(this);
|
| if (enable_sending_initial_data_)
|
| SendInitialData();
|
| pool_ = pool;
|
| @@ -1048,9 +1048,25 @@
|
| // push is hardly used. Write tests for this and fix this. (See
|
| // http://crbug.com/261712 .)
|
| if (owned_stream->type() == SPDY_PUSH_STREAM)
|
| - unclaimed_pushed_streams_.erase(owned_stream->url());
|
| + unclaimed_pushed_streams_.erase(owned_stream->url());
|
|
|
| + base::WeakPtr<SpdySession> weak_this = GetWeakPtr();
|
| +
|
| DeleteStream(owned_stream.Pass(), status);
|
| +
|
| + if (!weak_this)
|
| + return;
|
| +
|
| + if (availability_state_ == STATE_CLOSED)
|
| + return;
|
| +
|
| + // If there are no active streams and the socket pool is stalled, close the
|
| + // session to free up a socket slot.
|
| + if (active_streams_.empty() && connection_->IsPoolStalled()) {
|
| + CloseSessionResult result =
|
| + DoCloseSession(ERR_CONNECTION_CLOSED, "Closing idle connection.");
|
| + DCHECK_NE(result, SESSION_ALREADY_CLOSED);
|
| + }
|
| }
|
|
|
| void SpdySession::CloseCreatedStreamIterator(CreatedStreamSet::iterator it,
|
|
|