Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Unified Diff: net/spdy/spdy_stream.cc

Issue 492063002: Allow SPDY POSTs to be terminated by an empty FIN data frame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment in response to comment Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« net/spdy/spdy_http_stream.cc ('K') | « net/spdy/spdy_session.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« net/spdy/spdy_http_stream.cc ('K') | « net/spdy/spdy_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698