void SQLTransactionCoordinator::acquireLock(SQLTransaction* transaction) { String dbIdentifier = getDatabaseIdentifier(transaction); CoordinationInfoMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); if (coordinationInfoIterator == m_coordinationInfoMap.end()) { // No pending transactions for this DB coordinationInfoIterator = m_coordinationInfoMap.add(dbIdentifier, CoordinationInfo()).first; } CoordinationInfo& info = coordinationInfoIterator->second; info.pendingTransactions.append(transaction); processPendingTransactions(info); }
void SQLTransactionCoordinator::acquireLock(SQLTransactionBackend* transaction) { ASSERT(!m_isShuttingDown); String dbIdentifier = getDatabaseIdentifier(transaction); CoordinationInfoMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); if (coordinationInfoIterator == m_coordinationInfoMap.end()) { // No pending transactions for this DB coordinationInfoIterator = m_coordinationInfoMap.add(dbIdentifier, CoordinationInfo()).iterator; } CoordinationInfo& info = coordinationInfoIterator->value; info.pendingTransactions.append(transaction); processPendingTransactions(info); }
void SQLTransactionCoordinator::releaseLock(SQLTransactionBackend* transaction) { if (m_isShuttingDown) return; String dbIdentifier = getDatabaseIdentifier(transaction); CoordinationInfoMap::iterator coordinationInfoIterator = m_coordinationInfoMap.find(dbIdentifier); ASSERT(coordinationInfoIterator != m_coordinationInfoMap.end()); CoordinationInfo& info = coordinationInfoIterator->value; if (transaction->isReadOnly()) { ASSERT(info.activeReadTransactions.contains(transaction)); info.activeReadTransactions.remove(transaction); } else { ASSERT(info.activeWriteTransaction == transaction); info.activeWriteTransaction = 0; } processPendingTransactions(info); }