summaryrefslogtreecommitdiff
path: root/chromium/content/browser/indexed_db/indexed_db_transaction.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/indexed_db/indexed_db_transaction.cc')
-rw-r--r--chromium/content/browser/indexed_db/indexed_db_transaction.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/chromium/content/browser/indexed_db/indexed_db_transaction.cc b/chromium/content/browser/indexed_db/indexed_db_transaction.cc
index 5040dddf49f..b3867a21b49 100644
--- a/chromium/content/browser/indexed_db/indexed_db_transaction.cc
+++ b/chromium/content/browser/indexed_db/indexed_db_transaction.cc
@@ -460,9 +460,13 @@ void IndexedDBTransaction::Timeout() {
void IndexedDBTransaction::CloseOpenCursors() {
IDB_TRACE1("IndexedDBTransaction::CloseOpenCursors", "txn.id", id());
- for (auto* cursor : open_cursors_)
- cursor->Close();
+
+ // IndexedDBCursor::Close() indirectly mutates |open_cursors_|, when it calls
+ // IndexedDBTransaction::UnregisterOpenCursor().
+ std::set<IndexedDBCursor*> open_cursors = std::move(open_cursors_);
open_cursors_.clear();
+ for (auto* cursor : open_cursors)
+ cursor->Close();
}
void IndexedDBTransaction::AddPendingObserver(