Index: net/quic/reliable_quic_stream.cc |
diff --git a/net/quic/reliable_quic_stream.cc b/net/quic/reliable_quic_stream.cc |
index 0ed990e311de4ad3a04439b0fd8b990a36fcc663..144c9080ac0be7b964a62ff19e4c228a07f3c52b 100644 |
--- a/net/quic/reliable_quic_stream.cc |
+++ b/net/quic/reliable_quic_stream.cc |
@@ -95,7 +95,12 @@ void ReliableQuicStream::TerminateFromPeer(bool half_close) { |
void ReliableQuicStream::Close(QuicRstStreamErrorCode error) { |
stream_error_ = error; |
- session()->SendRstStream(id(), error); |
+ if (error != QUIC_STREAM_NO_ERROR) { |
+ // Sending a RstStream results in calling CloseStream. |
+ session()->SendRstStream(id(), error); |
+ } else { |
+ session_->CloseStream(id()); |
+ } |
} |
int ReliableQuicStream::Readv(const struct iovec* iov, size_t iov_len) { |
@@ -155,6 +160,7 @@ QuicSpdyCompressor* ReliableQuicStream::compressor() { |
} |
QuicConsumedData ReliableQuicStream::WriteData(StringPiece data, bool fin) { |
+ DCHECK(data.size() > 0 || fin); |
return WriteOrBuffer(data, fin); |
} |
@@ -212,6 +218,8 @@ QuicConsumedData ReliableQuicStream::WriteDataInternal( |
if (fin && consumed_data.fin_consumed) { |
fin_sent_ = true; |
CloseWriteSide(); |
+ } else if (fin && !consumed_data.fin_consumed) { |
+ session_->MarkWriteBlocked(id()); |
} |
} else { |
session_->MarkWriteBlocked(id()); |