Chromium Code Reviews| Index: net/spdy/spdy_stream.cc |
| diff --git a/net/spdy/spdy_stream.cc b/net/spdy/spdy_stream.cc |
| index 40ec654bba429fd91253cd27bf1bf61ac8896794..3a0d988d9f77b3a654a27c668973583dcb8798c3 100644 |
| --- a/net/spdy/spdy_stream.cc |
| +++ b/net/spdy/spdy_stream.cc |
| @@ -794,7 +794,12 @@ void SpdyStream::QueueNextDataFrame() { |
| io_state_ == STATE_HALF_CLOSED_REMOTE) << io_state_; |
| CHECK_GT(stream_id_, 0u); |
| CHECK(pending_send_data_.get()); |
| - CHECK_GT(pending_send_data_->BytesRemaining(), 0); |
| + // Only the final fame may have a length of 0. |
|
mef
2014/08/26 12:58:41
nit: fame -> frame.
|
| + if (pending_send_status_ == NO_MORE_DATA_TO_SEND) { |
| + CHECK_GE(pending_send_data_->BytesRemaining(), 0); |
| + } else { |
| + CHECK_GT(pending_send_data_->BytesRemaining(), 0); |
| + } |
| SpdyDataFlags flags = |
| (pending_send_status_ == NO_MORE_DATA_TO_SEND) ? |
| @@ -814,13 +819,18 @@ void SpdyStream::QueueNextDataFrame() { |
| size_t payload_size = |
| data_buffer->GetRemainingSize() - session_->GetDataFrameMinimumSize(); |
| DCHECK_LE(payload_size, session_->GetDataFrameMaximumPayload()); |
| - DecreaseSendWindowSize(static_cast<int32>(payload_size)); |
| - // This currently isn't strictly needed, since write frames are |
| - // discarded only if the stream is about to be closed. But have it |
| - // here anyway just in case this changes. |
| - data_buffer->AddConsumeCallback( |
| - base::Bind(&SpdyStream::OnWriteBufferConsumed, |
| - GetWeakPtr(), payload_size)); |
| + |
| + // Send window size is based on payload size, so nothing to do if this is |
| + // just a FIN with no payload. |
| + if (payload_size != 0) { |
| + DecreaseSendWindowSize(static_cast<int32>(payload_size)); |
| + // This currently isn't strictly needed, since write frames are |
| + // discarded only if the stream is about to be closed. But have it |
| + // here anyway just in case this changes. |
| + data_buffer->AddConsumeCallback( |
| + base::Bind(&SpdyStream::OnWriteBufferConsumed, |
| + GetWeakPtr(), payload_size)); |
| + } |
| } |
| session_->EnqueueStreamWrite( |