Remove redundant stream finding code when STOP_SENDING frame is received.
QuicSession::OnStopSending() already finds the stream and does staticness checks. We can simplify QuicSession::SendRstStreamInner() by moving the stream book keeping to OnStopSending().
gfe-relnote: protected by disabled v99 flag.
PiperOrigin-RevId: 278745064
Change-Id: I3734cff264fdadd58d3dfe50b418fd4c76bd19ce
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index c16b723..2761e61 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -272,6 +272,8 @@
static_cast<quic::QuicRstStreamErrorCode>(frame.application_error_code),
stream->stream_bytes_written(),
/*close_write_side_only=*/true);
+ stream->set_rst_sent(true);
+ stream->CloseWriteSide();
}
void QuicSession::PendingStreamOnRstStream(const QuicRstStreamFrame& frame) {
@@ -715,26 +717,6 @@
if (!close_write_side_only) {
CloseStreamInner(id, true);
- return;
- }
- DCHECK(VersionHasIetfQuicFrames(transport_version()));
-
- StreamMap::iterator it = stream_map_.find(id);
- if (it != stream_map_.end()) {
- if (it->second->is_static()) {
- QUIC_DVLOG(1) << ENDPOINT
- << "Try to send rst for a static stream, id: " << id
- << " Closing connection";
- connection()->CloseConnection(
- QUIC_INVALID_STREAM_ID, "Sending rst for a static stream",
- ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
- return;
- }
- QuicStream* stream = it->second.get();
- if (stream) {
- stream->set_rst_sent(true);
- stream->CloseWriteSide();
- }
}
}
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index 6a6a4b2..c4f2d98 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -209,7 +209,9 @@
// the peer. Returns true if |frame| is consumed, false otherwise.
virtual bool WriteControlFrame(const QuicFrame& frame);
- // Called by streams when they want to close the stream in both directions.
+ // Close the stream in both directions.
+ // TODO(renjietang): rename this method as it sends both RST_STREAM and
+ // STOP_SENDING in IETF QUIC.
virtual void SendRstStream(QuicStreamId id,
QuicRstStreamErrorCode error,
QuicStreamOffset bytes_written);
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index 74fbcf2..c82b4d0 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -1577,27 +1577,6 @@
}
}
-// Test that receiving a STOP_SENDING just closes the write side of the stream.
-// If not V99, the test is a noop (no STOP_SENDING in Google QUIC).
-TEST_P(QuicStreamTest, OnStopSendingReadOrReadWrite) {
- Initialize();
- if (!VersionHasIetfQuicFrames(connection_->transport_version())) {
- return;
- }
-
- EXPECT_FALSE(stream_->write_side_closed());
- EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
-
- // Simulate receipt of a STOP_SENDING.
- stream_->OnStopSending(123);
-
- // Should close just the read side.
- EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
- // TODO(b/142425843): Currently no action is taken upon receiving stop
- // sending. Need to figure out what to do and turn on this expectation.
- // EXPECT_TRUE(stream_->write_side_closed());
-}
-
// SendOnlyRstStream must only send a RESET_STREAM (no bundled STOP_SENDING).
TEST_P(QuicStreamTest, SendOnlyRstStream) {
Initialize();
@@ -1615,10 +1594,6 @@
QUIC_BAD_APPLICATION_PAYLOAD,
stream_->stream_bytes_written(),
/*close_write_side_only=*/true);
-
- // ResetStreamOnly should just close the write side.
- EXPECT_FALSE(QuicStreamPeer::read_side_closed(stream_));
- EXPECT_TRUE(stream_->write_side_closed());
}
TEST_P(QuicStreamTest, WindowUpdateForReadOnlyStream) {