Index: Source/modules/webdatabase/SQLTransactionCoordinator.cpp |
diff --git a/Source/modules/webdatabase/SQLTransactionCoordinator.cpp b/Source/modules/webdatabase/SQLTransactionCoordinator.cpp |
index e086aaf9aab0f2d8d8c22ade40edda07aa2a80e0..133af38cf2717c47ad3f2df8b473ad54c2ab1e38 100644 |
--- a/Source/modules/webdatabase/SQLTransactionCoordinator.cpp |
+++ b/Source/modules/webdatabase/SQLTransactionCoordinator.cpp |
@@ -54,7 +54,7 @@ void SQLTransactionCoordinator::processPendingTransactions(CoordinationInfo& inf |
if (info.activeWriteTransaction || info.pendingTransactions.isEmpty()) |
return; |
- RefPtr<SQLTransactionBackend> firstPendingTransaction = info.pendingTransactions.first(); |
+ RefPtrWillBeRawPtr<SQLTransactionBackend> firstPendingTransaction = info.pendingTransactions.first(); |
if (firstPendingTransaction->isReadOnly()) { |
do { |
firstPendingTransaction = info.pendingTransactions.takeFirst(); |
@@ -74,16 +74,16 @@ void SQLTransactionCoordinator::acquireLock(SQLTransactionBackend* transaction) |
String dbIdentifier = getDatabaseIdentifier(transaction); |
- CoordinationInfoMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); |
+ CoordinationInfoHeapMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); |
if (coordinationInfoIterator == m_coordinationInfoMap.end()) { |
// No pending transactions for this DB |
- CoordinationInfo& info = m_coordinationInfoMap.add(dbIdentifier, CoordinationInfo()).storedValue->value; |
- info.pendingTransactions.append(transaction); |
- processPendingTransactions(info); |
+ CoordinationInfo* info = m_coordinationInfoMap.add(dbIdentifier, CoordinationInfo::create()).storedValue->value.get(); |
+ info->pendingTransactions.append(transaction); |
+ processPendingTransactions(*info); |
} else { |
- CoordinationInfo& info = coordinationInfoIterator->value; |
- info.pendingTransactions.append(transaction); |
- processPendingTransactions(info); |
+ CoordinationInfo* info = coordinationInfoIterator->value.get(); |
+ info->pendingTransactions.append(transaction); |
+ processPendingTransactions(*info); |
} |
} |
@@ -95,19 +95,19 @@ void SQLTransactionCoordinator::releaseLock(SQLTransactionBackend* transaction) |
String dbIdentifier = getDatabaseIdentifier(transaction); |
- CoordinationInfoMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); |
+ CoordinationInfoHeapMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); |
ASSERT_WITH_SECURITY_IMPLICATION(coordinationInfoIterator != m_coordinationInfoMap.end()); |
- CoordinationInfo& info = coordinationInfoIterator->value; |
+ CoordinationInfo* info = coordinationInfoIterator->value.get(); |
if (transaction->isReadOnly()) { |
- ASSERT(info.activeReadTransactions.contains(transaction)); |
- info.activeReadTransactions.remove(transaction); |
+ ASSERT(info->activeReadTransactions.contains(transaction)); |
+ info->activeReadTransactions.remove(transaction); |
} else { |
- ASSERT(info.activeWriteTransaction == transaction); |
- info.activeWriteTransaction = nullptr; |
+ ASSERT(info->activeWriteTransaction == transaction); |
+ info->activeWriteTransaction = nullptr; |
} |
- processPendingTransactions(info); |
+ processPendingTransactions(*info); |
} |
void SQLTransactionCoordinator::shutdown() |
@@ -117,27 +117,27 @@ void SQLTransactionCoordinator::shutdown() |
m_isShuttingDown = true; |
// Notify all transactions in progress that the database thread is shutting down |
- for (CoordinationInfoMap::iterator coordinationInfoIterator = m_coordinationInfoMap.begin(); |
+ for (CoordinationInfoHeapMap::iterator coordinationInfoIterator = m_coordinationInfoMap.begin(); |
coordinationInfoIterator != m_coordinationInfoMap.end(); ++coordinationInfoIterator) { |
- CoordinationInfo& info = coordinationInfoIterator->value; |
+ CoordinationInfo* info = coordinationInfoIterator->value.get(); |
// Clean up transactions that have reached "lockAcquired": |
// Transaction phase 4 cleanup. See comment on "What happens if a |
// transaction is interrupted?" at the top of SQLTransactionBackend.cpp. |
- if (info.activeWriteTransaction) |
- info.activeWriteTransaction->notifyDatabaseThreadIsShuttingDown(); |
- for (HashSet<RefPtr<SQLTransactionBackend> >::iterator activeReadTransactionsIterator = |
- info.activeReadTransactions.begin(); |
- activeReadTransactionsIterator != info.activeReadTransactions.end(); |
- ++activeReadTransactionsIterator) { |
+ if (info->activeWriteTransaction) |
+ info->activeWriteTransaction->notifyDatabaseThreadIsShuttingDown(); |
+ for (WillBeHeapHashSet<RefPtrWillBeMember<SQLTransactionBackend> >::iterator activeReadTransactionsIterator = |
+ info->activeReadTransactions.begin(); |
+ activeReadTransactionsIterator != info->activeReadTransactions.end(); |
+ ++activeReadTransactionsIterator) { |
(*activeReadTransactionsIterator)->notifyDatabaseThreadIsShuttingDown(); |
} |
// Clean up transactions that have NOT reached "lockAcquired": |
// Transaction phase 3 cleanup. See comment on "What happens if a |
// transaction is interrupted?" at the top of SQLTransactionBackend.cpp. |
- while (!info.pendingTransactions.isEmpty()) { |
- RefPtr<SQLTransactionBackend> transaction = info.pendingTransactions.first(); |
+ while (!info->pendingTransactions.isEmpty()) { |
+ RefPtrWillBeRawPtr<SQLTransactionBackend> transaction = info->pendingTransactions.first(); |
transaction->notifyDatabaseThreadIsShuttingDown(); |
} |
} |