commit 1814ad27e1ee4fc976a13a26f86858931432decb
parent 3bc4ad2c92f29745f64d1f8debaecdc6d2949b97
Author: Kershaw Chang <kershaw@mozilla.com>
Date: Thu, 27 Nov 2025 13:32:40 +0000
Bug 2002687 - CancelAllTransactions: drain queues before closing transactions, r=necko-reviewers,valentin
Differential Revision: https://phabricator.services.mozilla.com/D274259
Diffstat:
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/netwerk/protocol/http/PendingTransactionQueue.cpp b/netwerk/protocol/http/PendingTransactionQueue.cpp
@@ -267,23 +267,25 @@ void PendingTransactionQueue::Compact() {
}
void PendingTransactionQueue::CancelAllTransactions(nsresult reason) {
- for (const auto& pendingTransInfo : mUrgentStartQ) {
- LOG(("PendingTransactionQueue::CancelAllTransactions %p\n",
- pendingTransInfo->Transaction()));
- pendingTransInfo->Transaction()->Close(reason);
+ AutoTArray<nsHttpTransaction*, 64> toClose;
+ for (const auto& info : mUrgentStartQ) {
+ toClose.AppendElement(info->Transaction());
}
mUrgentStartQ.Clear();
+ // Drain all table entries into toClose, then clear them.
for (const auto& data : mPendingTransactionTable.Values()) {
- for (const auto& pendingTransInfo : *data) {
- LOG(("PendingTransactionQueue::CancelAllTransactions %p\n",
- pendingTransInfo->Transaction()));
- pendingTransInfo->Transaction()->Close(reason);
+ for (const auto& info : *data) {
+ toClose.AppendElement(info->Transaction());
}
data->Clear();
}
-
mPendingTransactionTable.Clear();
+
+ for (auto trans : toClose) {
+ LOG(("PendingTransactionQueue::CancelAllTransactions %p\n", trans));
+ trans->Close(reason);
+ }
}
} // namespace net