Add DCHECKs to make sure data does not get sent after connection closed.
gfe-relnote: n/a (DCHECK only)
PiperOrigin-RevId: 296897669
Change-Id: Ib333d6c3df430719bc92700e0eba68bd51c81367
diff --git a/quic/core/quic_control_frame_manager.cc b/quic/core/quic_control_frame_manager.cc
index 5e33368..e1053f1 100644
--- a/quic/core/quic_control_frame_manager.cc
+++ b/quic/core/quic_control_frame_manager.cc
@@ -23,6 +23,9 @@
} // namespace
+#define ENDPOINT \
+ (session_->perspective() == Perspective::IS_SERVER ? "Server: " : "Client: ")
+
QuicControlFrameManager::QuicControlFrameManager(QuicSession* session)
: last_control_frame_id_(kInvalidControlFrameId),
least_unacked_(1),
@@ -282,6 +285,8 @@
}
void QuicControlFrameManager::WriteBufferedFrames() {
+ DCHECK(session_->connection()->connected())
+ << ENDPOINT << "Try to write control frames when connection is closed.";
while (HasBufferedFrames()) {
session_->SetTransmissionType(NOT_RETRANSMISSION);
QuicFrame frame_to_send =
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index a47c265..073758e 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -739,6 +739,8 @@
QuicStreamOffset offset,
StreamSendingState state,
bool is_retransmission) {
+ DCHECK(connection_->connected())
+ << ENDPOINT << "Try to write stream data when connection is closed.";
if (!IsEncryptionEstablished() &&
!QuicUtils::IsCryptoStreamId(transport_version(), id)) {
// Do not let streams write without encryption. The calling stream will end
@@ -2094,6 +2096,8 @@
}
MessageResult QuicSession::SendMessage(QuicMemSliceSpan message, bool flush) {
+ DCHECK(connection_->connected())
+ << ENDPOINT << "Try to write messages when connection is closed.";
if (!IsEncryptionEstablished()) {
return {MESSAGE_STATUS_ENCRYPTION_NOT_ESTABLISHED, 0};
}