| Index: third_party/WebKit/Source/modules/webdatabase/Database.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webdatabase/Database.cpp b/third_party/WebKit/Source/modules/webdatabase/Database.cpp
|
| index 49172e398407040128481fd2e1554d7e8fd9f28a..1b7eaab5762526bbe7066ededbfe29558b9e667d 100644
|
| --- a/third_party/WebKit/Source/modules/webdatabase/Database.cpp
|
| +++ b/third_party/WebKit/Source/modules/webdatabase/Database.cpp
|
| @@ -213,6 +213,7 @@ Database::Database(DatabaseContext* databaseContext, const String& name, const S
|
| , m_transactionInProgress(false)
|
| , m_isTransactionQueueEnabled(true)
|
| {
|
| + ASSERT(isMainThread());
|
| m_contextThreadSecurityOrigin = m_databaseContext->securityOrigin()->isolatedCopy();
|
|
|
| m_databaseAuthorizer = DatabaseAuthorizer::create(infoTableName);
|
| @@ -282,8 +283,8 @@ void Database::close()
|
| // Transaction phase 1 cleanup. See comment on "What happens if a
|
| // transaction is interrupted?" at the top of SQLTransactionBackend.cpp.
|
| SQLTransactionBackend* transaction = nullptr;
|
| - while (!m_transactionQueue.isEmpty()) {
|
| - transaction = m_transactionQueue.takeFirst();
|
| + while (m_transactionQueue && !m_transactionQueue->isEmpty()) {
|
| + transaction = m_transactionQueue->takeFirst();
|
| transaction->notifyDatabaseThreadIsShuttingDown();
|
| }
|
|
|
| @@ -306,7 +307,9 @@ SQLTransactionBackend* Database::runTransaction(SQLTransaction* transaction, boo
|
| wrapper = ChangeVersionWrapper::create(data->oldVersion(), data->newVersion());
|
|
|
| SQLTransactionBackend* transactionBackend = SQLTransactionBackend::create(this, transaction, wrapper, readOnly);
|
| - m_transactionQueue.append(transactionBackend);
|
| + if (!m_transactionQueue)
|
| + m_transactionQueue = new HeapDeque<Member<SQLTransactionBackend>>();
|
| + m_transactionQueue->append(transactionBackend);
|
| if (!m_transactionInProgress)
|
| scheduleTransaction();
|
|
|
| @@ -325,8 +328,8 @@ void Database::scheduleTransaction()
|
| ASSERT(!m_transactionInProgressMutex.tryLock()); // Locked by caller.
|
| SQLTransactionBackend* transaction = nullptr;
|
|
|
| - if (m_isTransactionQueueEnabled && !m_transactionQueue.isEmpty())
|
| - transaction = m_transactionQueue.takeFirst();
|
| + if (m_isTransactionQueueEnabled && m_transactionQueue && !m_transactionQueue->isEmpty())
|
| + transaction = m_transactionQueue->takeFirst();
|
|
|
| if (transaction && databaseContext()->databaseThreadAvailable()) {
|
| OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(transaction);
|
|
|