Index: net/spdy/spdy_session.cc |
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc |
index c20d89e4a05e40c1cf34bcade93a8ff8840ff02e..5f0e285afc135ad7577ced68f6d2317b75c5d2e1 100644 |
--- a/net/spdy/spdy_session.cc |
+++ b/net/spdy/spdy_session.cc |
@@ -532,7 +532,7 @@ SpdySession::~SpdySession() { |
net_log_.EndEvent(NetLog::TYPE_SPDY_SESSION); |
} |
-Error SpdySession::InitializeWithSocket( |
+void SpdySession::InitializeWithSocket( |
scoped_ptr<ClientSocketHandle> connection, |
SpdySessionPool* pool, |
bool is_secure, |
@@ -593,19 +593,17 @@ Error SpdySession::InitializeWithSocket( |
NetLog::TYPE_SPDY_SESSION_INITIALIZED, |
connection_->socket()->NetLog().source().ToEventParametersCallback()); |
- int error = DoReadLoop(READ_STATE_DO_READ, OK); |
- if (error == ERR_IO_PENDING) |
- error = OK; |
- if (error == OK) { |
- DCHECK_NE(availability_state_, STATE_CLOSED); |
- connection_->AddHigherLayeredPool(this); |
- if (enable_sending_initial_data_) |
- SendInitialData(); |
- pool_ = pool; |
- } else { |
- DcheckClosed(); |
- } |
- return static_cast<Error>(error); |
+ DCHECK_NE(availability_state_, STATE_CLOSED); |
+ connection_->AddHigherLayeredPool(this); |
+ if (enable_sending_initial_data_) |
+ SendInitialData(); |
+ pool_ = pool; |
+ |
+ // Bootstrap the read loop. |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&SpdySession::PumpReadLoop, |
+ weak_factory_.GetWeakPtr(), READ_STATE_DO_READ, OK)); |
} |
bool SpdySession::VerifyDomainAuthentication(const std::string& domain) { |
@@ -1554,9 +1552,8 @@ SpdySession::CloseSessionResult SpdySession::DoCloseSession( |
UMA_HISTOGRAM_CUSTOM_COUNTS("Net.SpdySession.BytesRead.OtherErrors", |
total_bytes_received_, 1, 100000000, 50); |
- // |pool_| will be NULL when |InitializeWithSocket()| is in the |
- // call stack. |
- if (pool_ && availability_state_ != STATE_GOING_AWAY) |
+ DCHECK(pool_); |
+ if (availability_state_ != STATE_GOING_AWAY) |
pool_->MakeSessionUnavailable(GetWeakPtr()); |
availability_state_ = STATE_CLOSED; |
@@ -1628,10 +1625,8 @@ void SpdySession::CloseSessionOnError(Error err, |
void SpdySession::MakeUnavailable() { |
if (availability_state_ < STATE_GOING_AWAY) { |
availability_state_ = STATE_GOING_AWAY; |
- // |pool_| will be NULL when |InitializeWithSocket()| is in the |
- // call stack. |
- if (pool_) |
- pool_->MakeSessionUnavailable(GetWeakPtr()); |
+ DCHECK(pool_); |
+ pool_->MakeSessionUnavailable(GetWeakPtr()); |
} |
} |
@@ -1686,7 +1681,8 @@ base::Value* SpdySession::GetInfoAsValue() const { |
} |
bool SpdySession::IsReused() const { |
- return buffered_spdy_framer_->frames_received() > 0; |
+ return buffered_spdy_framer_->frames_received() > 0 || |
+ connection_->reuse_type() == ClientSocketHandle::UNUSED_IDLE; |
} |
bool SpdySession::GetLoadTimingInfo(SpdyStreamId stream_id, |