Index: net/quic/quic_connection.cc |
diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc |
index afd5e50e4e401d832fcc311d610e09f3305b5e8b..300028d819804a4c0c23ad8c04eb7c6cbe8f76d5 100644 |
--- a/net/quic/quic_connection.cc |
+++ b/net/quic/quic_connection.cc |
@@ -585,6 +585,13 @@ bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { |
"when multipath is not enabled."); |
return false; |
} |
+ if (!packet_generator_.IsPendingPacketEmpty()) { |
+ QUIC_BUG << "Pending frames must be serialized before incoming packets are " |
+ << "processed, because that may change a queued ack frame."; |
+ SendConnectionCloseWithDetails(QUIC_INTERNAL_ERROR, |
+ "Should not process packets while sending."); |
+ return false; |
+ } |
// If this packet has already been seen, or the sender has told us that it |
// will not be retransmitted, then stop processing the packet. |
@@ -1029,6 +1036,10 @@ void QuicConnection::PopulateAckFrame(QuicAckFrame* ack) { |
clock_->ApproximateNow()); |
} |
+const QuicFrame QuicConnection::GetUpdatedAckFrame() { |
+ return received_packet_manager_.GetUpdatedAckFrame(clock_->ApproximateNow()); |
+} |
+ |
void QuicConnection::PopulateStopWaitingFrame( |
QuicStopWaitingFrame* stop_waiting) { |
stop_waiting->least_unacked = GetLeastUnacked(); |