LibWeb/IndexedDB: Remove spin_until from checking finished transactions

This commit is contained in:
Luke Wilde
2025-09-13 11:01:25 +01:00
committed by Andreas Kling
parent 52b53e52fb
commit d87c2a55b0
Notes: github-actions[bot] 2025-10-08 15:26:31 +00:00
10 changed files with 250 additions and 42 deletions

View File

@@ -0,0 +1,45 @@
/*
* Copyright (c) 2025, Luke Wilde <luke@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/IndexedDB/IDBTransaction.h>
#include <LibWeb/IndexedDB/Internal/IDBTransactionObserver.h>
namespace Web::IndexedDB {
GC_DEFINE_ALLOCATOR(IDBTransactionObserver);
IDBTransactionObserver::IDBTransactionObserver(IDBTransaction& transaction)
: m_transaction(transaction)
{
m_transaction->register_transaction_observer({}, *this);
m_observing = true;
}
IDBTransactionObserver::~IDBTransactionObserver() = default;
void IDBTransactionObserver::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_transaction);
visitor.visit(m_transaction_finished_observer);
}
void IDBTransactionObserver::finalize()
{
Base::finalize();
unobserve();
}
void IDBTransactionObserver::unobserve()
{
if (!m_observing)
return;
m_transaction->unregister_transaction_observer({}, *this);
m_observing = false;
}
}