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()) {