Remove `is_static` argument from QuicWriteBlockedList::UnregisterStream().
This argument is unnecessary, because QuicWriteBlockedList can easily determine
whether the stream has been registered as static or not.
PiperOrigin-RevId: 503440382
diff --git a/quiche/quic/core/http/quic_server_session_base_test.cc b/quiche/quic/core/http/quic_server_session_base_test.cc
index 133dcbf..807f05f 100644
--- a/quiche/quic/core/http/quic_server_session_base_test.cc
+++ b/quiche/quic/core/http/quic_server_session_base_test.cc
@@ -525,8 +525,7 @@
if (!VersionUsesHttp3(transport_version())) {
session_->UnregisterStreamPriority(
- QuicUtils::GetHeadersStreamId(transport_version()),
- /*is_static=*/true);
+ QuicUtils::GetHeadersStreamId(transport_version()));
}
QuicServerSessionBasePeer::SetCryptoStream(session_.get(), nullptr);
MockQuicCryptoServerStream* quic_crypto_stream = nullptr;
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index a58e572..4b37c76 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -1816,8 +1816,8 @@
write_blocked_streams()->RegisterStream(id, is_static, priority);
}
-void QuicSession::UnregisterStreamPriority(QuicStreamId id, bool is_static) {
- write_blocked_streams()->UnregisterStream(id, is_static);
+void QuicSession::UnregisterStreamPriority(QuicStreamId id) {
+ write_blocked_streams()->UnregisterStream(id);
}
void QuicSession::UpdateStreamPriority(QuicStreamId id,
diff --git a/quiche/quic/core/quic_session.h b/quiche/quic/core/quic_session.h
index 5c97f1a..f59d184 100644
--- a/quiche/quic/core/quic_session.h
+++ b/quiche/quic/core/quic_session.h
@@ -334,7 +334,7 @@
void RegisterStreamPriority(QuicStreamId id, bool is_static,
const QuicStreamPriority& priority) override;
// Clears priority from the write blocked list.
- void UnregisterStreamPriority(QuicStreamId id, bool is_static) override;
+ void UnregisterStreamPriority(QuicStreamId id) override;
// Updates priority on the write blocked list.
void UpdateStreamPriority(QuicStreamId id,
const QuicStreamPriority& new_priority) override;
diff --git a/quiche/quic/core/quic_stream.cc b/quiche/quic/core/quic_stream.cc
index 3fa0d01..6a436ff 100644
--- a/quiche/quic/core/quic_stream.cc
+++ b/quiche/quic/core/quic_stream.cc
@@ -390,7 +390,7 @@
<< ", fin_outstanding: " << fin_outstanding_;
}
if (stream_delegate_ != nullptr && type_ != CRYPTO) {
- stream_delegate_->UnregisterStreamPriority(id(), is_static_);
+ stream_delegate_->UnregisterStreamPriority(id());
}
}
diff --git a/quiche/quic/core/quic_write_blocked_list.cc b/quiche/quic/core/quic_write_blocked_list.cc
index 2497907..f6d00f2 100644
--- a/quiche/quic/core/quic_write_blocked_list.cc
+++ b/quiche/quic/core/quic_write_blocked_list.cc
@@ -68,10 +68,8 @@
priority_write_scheduler_.RegisterStream(stream_id, priority);
}
-void QuicWriteBlockedList::UnregisterStream(QuicStreamId stream_id,
- bool is_static) {
- if (is_static) {
- static_stream_collection_.Unregister(stream_id);
+void QuicWriteBlockedList::UnregisterStream(QuicStreamId stream_id) {
+ if (static_stream_collection_.Unregister(stream_id)) {
return;
}
priority_write_scheduler_.UnregisterStream(stream_id);
@@ -129,17 +127,17 @@
return false;
}
-void QuicWriteBlockedList::StaticStreamCollection::Unregister(QuicStreamId id) {
+bool QuicWriteBlockedList::StaticStreamCollection::Unregister(QuicStreamId id) {
for (auto it = streams_.begin(); it != streams_.end(); ++it) {
if (it->id == id) {
if (it->is_blocked) {
--num_blocked_;
}
streams_.erase(it);
- return;
+ return true;
}
}
- QUICHE_DCHECK(false) << "Erasing a non-exist stream with id " << id;
+ return false;
}
bool QuicWriteBlockedList::StaticStreamCollection::SetBlocked(QuicStreamId id) {
diff --git a/quiche/quic/core/quic_write_blocked_list.h b/quiche/quic/core/quic_write_blocked_list.h
index 0ad2c2d..b366eaf 100644
--- a/quiche/quic/core/quic_write_blocked_list.h
+++ b/quiche/quic/core/quic_write_blocked_list.h
@@ -63,7 +63,9 @@
void RegisterStream(QuicStreamId stream_id, bool is_static_stream,
const QuicStreamPriority& priority);
- void UnregisterStream(QuicStreamId stream_id, bool is_static);
+ // Unregister a stream. `stream_id` must be registered, either as a static
+ // stream or as a non-static stream.
+ void UnregisterStream(QuicStreamId stream_id);
// Updates the stored priority of a stream. Must not be called for static
// streams.
@@ -124,9 +126,9 @@
// True if |id| is in the collection, regardless of its state.
bool IsRegistered(QuicStreamId id) const;
- // Remove |id| from the collection, if it is in the blocked state, reduce
- // |num_blocked_| by 1.
- void Unregister(QuicStreamId id);
+ // Remove |id| from the collection. If it is in the blocked state, reduce
+ // |num_blocked_| by 1. Returns true if |id| was in the collection.
+ bool Unregister(QuicStreamId id);
// Set |id| to be blocked. If |id| is not already blocked, increase
// |num_blocked_| by 1.
diff --git a/quiche/quic/core/quic_write_blocked_list_test.cc b/quiche/quic/core/quic_write_blocked_list_test.cc
index 1847993..e69e071 100644
--- a/quiche/quic/core/quic_write_blocked_list_test.cc
+++ b/quiche/quic/core/quic_write_blocked_list_test.cc
@@ -6,6 +6,7 @@
#include "quiche/quic/platform/api/quic_test.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/platform/api/quiche_expect_bug.h"
using spdy::kV3HighestPriority;
using spdy::kV3LowestPriority;
@@ -53,8 +54,8 @@
write_blocked_list_.RegisterStream(stream_id, is_static_stream, priority);
}
- void UnregisterStream(QuicStreamId stream_id, bool is_static) {
- write_blocked_list_.UnregisterStream(stream_id, is_static);
+ void UnregisterStream(QuicStreamId stream_id) {
+ write_blocked_list_.UnregisterStream(stream_id);
}
void UpdateStreamPriority(QuicStreamId stream_id,
@@ -295,8 +296,8 @@
AddStream(1);
AddStream(3);
- UnregisterStream(23, kNotStatic);
- UnregisterStream(1, kStatic);
+ UnregisterStream(23);
+ UnregisterStream(1);
EXPECT_EQ(3u, PopFront());
EXPECT_EQ(17u, PopFront());
@@ -304,6 +305,14 @@
EXPECT_EQ(40, PopFront());
}
+TEST_F(QuicWriteBlockedListTest, UnregisterNotRegisteredStream) {
+ EXPECT_QUICHE_BUG(UnregisterStream(1), "Stream 1 not registered");
+
+ RegisterStream(2, kNotStatic, {kV3HighestPriority, kIncremental});
+ UnregisterStream(2);
+ EXPECT_QUICHE_BUG(UnregisterStream(2), "Stream 2 not registered");
+}
+
TEST_F(QuicWriteBlockedListTest, UpdateStreamPriority) {
RegisterStream(40, kNotStatic, {kV3LowestPriority, kNotIncremental});
RegisterStream(23, kNotStatic, {6, kIncremental});
diff --git a/quiche/quic/core/stream_delegate_interface.h b/quiche/quic/core/stream_delegate_interface.h
index b6db350..a5f03f0 100644
--- a/quiche/quic/core/stream_delegate_interface.h
+++ b/quiche/quic/core/stream_delegate_interface.h
@@ -44,7 +44,7 @@
virtual void RegisterStreamPriority(QuicStreamId id, bool is_static,
const QuicStreamPriority& priority) = 0;
// Called on stream destruction to clear priority.
- virtual void UnregisterStreamPriority(QuicStreamId id, bool is_static) = 0;
+ virtual void UnregisterStreamPriority(QuicStreamId id) = 0;
// Called by the stream on SetPriority to update priority.
virtual void UpdateStreamPriority(QuicStreamId id,
const QuicStreamPriority& new_priority) = 0;
diff --git a/quiche/quic/tools/quic_simple_server_session_test.cc b/quiche/quic/tools/quic_simple_server_session_test.cc
index d6eb67f..c30283c 100644
--- a/quiche/quic/tools/quic_simple_server_session_test.cc
+++ b/quiche/quic/tools/quic_simple_server_session_test.cc
@@ -491,8 +491,7 @@
if (!VersionUsesHttp3(transport_version())) {
session_->UnregisterStreamPriority(
- QuicUtils::GetHeadersStreamId(transport_version()),
- /*is_static=*/true);
+ QuicUtils::GetHeadersStreamId(transport_version()));
}
// Assume encryption already established.
QuicSimpleServerSessionPeer::SetCryptoStream(session_.get(), nullptr);