Internal QUICHE change
PiperOrigin-RevId: 332070542
Change-Id: Ifc8b12a9f7f04611d2b9ff25b48e46848827aef3
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index a36017c..d5bfc79 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -201,6 +201,7 @@
// Enable fixes for bugs found in tests and prod.
SetQuicRestartFlag(quic_enable_tls_resumption_v4, true);
SetQuicRestartFlag(quic_enable_zero_rtt_for_tls_v2, true);
+ SetQuicReloadableFlag(quic_fix_out_of_order_sending, true);
}
~EndToEndTest() override { QuicRecyclePort(server_address_.port()); }
@@ -530,8 +531,7 @@
if (server_connection != nullptr) {
QuicConnectionStats server_stats = server_connection->GetStats();
if (!had_packet_loss) {
- EXPECT_EQ(0u, server_stats.packets_lost -
- server_stats.packet_spuriously_detected_lost);
+ EXPECT_EQ(0u, server_stats.packets_lost);
}
EXPECT_EQ(0u, server_stats.packets_discarded);
EXPECT_EQ(server_session->user_agent_id().value_or("MissingUserAgent"),
@@ -1496,11 +1496,6 @@
EXPECT_FALSE(client_session->ReceivedInchoateReject());
EXPECT_FALSE(client_->client()->EarlyDataAccepted());
EXPECT_FALSE(client_->client()->ReceivedInchoateReject());
- while (client_->client()->connected() &&
- client_session->connection()->HasPendingAcks()) {
- // Flush all pending acks.
- client_->client()->WaitForEvents();
- }
VerifyCleanConnection(false);
}
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index bae994f..83f7fd7 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -4781,11 +4781,20 @@
DCHECK(!is_mtu_discovery);
return LEGACY_VERSION_ENCAPSULATE;
}
- if (version().CanSendCoalescedPackets() && !IsHandshakeConfirmed() &&
- !is_mtu_discovery) {
- // Before receiving ACK for any 1-RTT packets, always try to coalesce
- // packet (except MTU discovery packet).
- return COALESCE;
+ if (version().CanSendCoalescedPackets() && !is_mtu_discovery) {
+ if (!IsHandshakeConfirmed()) {
+ // Before receiving ACK for any 1-RTT packets, always try to coalesce
+ // packet (except MTU discovery packet).
+ return COALESCE;
+ }
+ if (GetQuicReloadableFlag(quic_fix_out_of_order_sending)) {
+ QUIC_RELOADABLE_FLAG_COUNT(quic_fix_out_of_order_sending);
+ if (coalesced_packet_.length() > 0) {
+ // If the coalescer is not empty, let this packet go through coalescer
+ // to avoid potential out of order sending.
+ return COALESCE;
+ }
+ }
}
if (!buffered_packets_.empty() || HandleWriteBlocked()) {
return BUFFER;