Internal QUICHE change PiperOrigin-RevId: 311388198 Change-Id: Ib8712ca8b3348b98c9d7a13a170d9ddaf5e4e951
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc index 1832092..0bae0bb 100644 --- a/quic/core/quic_connection.cc +++ b/quic/core/quic_connection.cc
@@ -2122,6 +2122,12 @@ // TODO(wub): Reduce max packet size to a safe default, or the actual MTU. mtu_discoverer_.Disable(); mtu_discovery_alarm_->Cancel(); + if (GetQuicReloadableFlag( + quic_ignore_msg_too_big_from_buffered_packets)) { + QUIC_RELOADABLE_FLAG_COUNT( + quic_ignore_msg_too_big_from_buffered_packets); + buffered_packets_.pop_front(); + } continue; } if (IsWriteError(result.status)) {
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc index a5a0a59..acbb1e0 100644 --- a/quic/core/quic_connection_test.cc +++ b/quic/core/quic_connection_test.cc
@@ -2065,6 +2065,24 @@ EXPECT_EQ(kPeerAddress, connection_.effective_peer_address()); } +// Regression test for b/150161358. +TEST_P(QuicConnectionTest, BufferedMtuPacketTooBig) { + if (!GetQuicReloadableFlag(quic_ignore_msg_too_big_from_buffered_packets)) { + return; + } + EXPECT_CALL(visitor_, OnWriteBlocked()).Times(1); + writer_->SetWriteBlocked(); + + // Send a MTU packet while blocked. It should be buffered. + connection_.SendMtuDiscoveryPacket(kMaxOutgoingPacketSize); + EXPECT_EQ(1u, connection_.NumQueuedPackets()); + EXPECT_TRUE(writer_->IsWriteBlocked()); + + writer_->AlwaysGetPacketTooLarge(); + writer_->SetWritable(); + connection_.OnCanWrite(); +} + TEST_P(QuicConnectionTest, WriteOutOfOrderQueuedPackets) { // EXPECT_QUIC_BUG tests are expensive so only run one instance of them. if (!IsDefaultTestConfiguration()) {