| Index: Source/modules/indexeddb/IDBTransaction.cpp
|
| diff --git a/Source/modules/indexeddb/IDBTransaction.cpp b/Source/modules/indexeddb/IDBTransaction.cpp
|
| index a3f3ea5cedab85656d93bd8ae26666282b879839..252fb50e180bf47d184d5fb865c87b8923c5fc8c 100644
|
| --- a/Source/modules/indexeddb/IDBTransaction.cpp
|
| +++ b/Source/modules/indexeddb/IDBTransaction.cpp
|
| @@ -59,6 +59,30 @@ IDBTransaction* IDBTransaction::create(ScriptState* scriptState, int64_t id, IDB
|
| return transaction;
|
| }
|
|
|
| +namespace {
|
| +
|
| +class DeactivateTransactionTask : public V8PerIsolateData::EndOfScopeTask {
|
| +public:
|
| + static PassOwnPtr<DeactivateTransactionTask> create(IDBTransaction* transaction)
|
| + {
|
| + return adoptPtr(new DeactivateTransactionTask(transaction));
|
| + }
|
| +
|
| + void Run() override
|
| + {
|
| + m_transaction->setActive(false);
|
| + m_transaction.clear();
|
| + }
|
| +
|
| +private:
|
| + DeactivateTransactionTask(IDBTransaction* transaction)
|
| + : m_transaction(transaction) { }
|
| +
|
| + Persistent<IDBTransaction> m_transaction;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| IDBTransaction::IDBTransaction(ScriptState* scriptState, int64_t id, const Vector<String>& objectStoreNames, WebIDBTransactionMode mode, IDBDatabase* db, IDBOpenDBRequest* openDBRequest, const IDBDatabaseMetadata& previousMetadata)
|
| : ActiveDOMObject(scriptState->executionContext())
|
| , m_id(id)
|
| @@ -77,7 +101,7 @@ IDBTransaction::IDBTransaction(ScriptState* scriptState, int64_t id, const Vecto
|
| }
|
|
|
| if (m_state == Active)
|
| - V8PerIsolateData::from(scriptState->isolate())->ensureIDBPendingTransactionMonitor()->addNewTransaction(*this);
|
| + V8PerIsolateData::from(scriptState->isolate())->addEndOfScopeTask(DeactivateTransactionTask::create(this));
|
| m_database->transactionCreated(this);
|
| }
|
|
|
|
|