Fix use-after-free in MoQ Chat Server.
When the server is tearing down, it triggers session teardown logic that calls server functions. Those calls should exit early.
Repro now passes.
PiperOrigin-RevId: 713340105
diff --git a/quiche/quic/moqt/tools/chat_server.cc b/quiche/quic/moqt/tools/chat_server.cc
index 871390b..e6a03f9 100644
--- a/quiche/quic/moqt/tools/chat_server.cc
+++ b/quiche/quic/moqt/tools/chat_server.cc
@@ -77,7 +77,6 @@
[this](absl::string_view error_message) {
std::cout << "Session terminated, reason = " << error_message << "\n";
session_ = nullptr;
- server_->DeleteSession(it_);
if (track_name_.has_value()) {
server_->DeleteUser(*track_name_);
}
@@ -205,6 +204,9 @@
}
void ChatServer::DeleteUser(FullTrackName track_name) {
+ if (!is_running_) {
+ return;
+ }
// RemoveAllSubscriptions() sends a SUBSCRIBE_DONE for each.
user_queues_[track_name]->RemoveAllSubscriptions();
user_queues_.erase(track_name);