DatabaseThread::DatabaseThread()
: m_transactionClient(adoptPtr(new SQLTransactionClient()))
- , m_transactionCoordinator(adoptPtrWillBeNoop(new SQLTransactionCoordinator()))
+ , m_transactionCoordinator(new SQLTransactionCoordinator())
, m_cleanupSync(0)
, m_terminationRequested(false)
{
void DatabaseThread::trace(Visitor* visitor)
{
-#if ENABLE(OILPAN)
visitor->trace(m_openDatabaseSet);
visitor->trace(m_transactionCoordinator);
-#endif
}
void DatabaseThread::start()
// inconsistent or locked state.
if (m_openDatabaseSet.size() > 0) {
// As the call to close will modify the original set, we must take a copy to iterate over.
- WillBeHeapHashSet<RefPtrWillBeMember<Database> > openSetCopy;
+ HeapHashSet<Member<Database> > openSetCopy;
openSetCopy.swap(m_openDatabaseSet);
- WillBeHeapHashSet<RefPtrWillBeMember<Database> >::iterator end = openSetCopy.end();
- for (WillBeHeapHashSet<RefPtrWillBeMember<Database> >::iterator it = openSetCopy.begin(); it != end; ++it)
+ HeapHashSet<Member<Database> >::iterator end = openSetCopy.end();
+ for (HeapHashSet<Member<Database> >::iterator it = openSetCopy.begin(); it != end; ++it)
(*it)->close();
}
+ m_openDatabaseSet.clear();
m_thread->postTask(new Task(WTF::bind(&DatabaseThread::cleanupDatabaseThreadCompleted, this)));
}
ASSERT(isDatabaseThread());
ASSERT(database);
ASSERT(!m_openDatabaseSet.contains(database));
- m_openDatabaseSet.add(database);
+ MutexLocker lock(m_terminationRequestedMutex);
+ if (!m_terminationRequested)
+ m_openDatabaseSet.add(database);
}
void DatabaseThread::recordDatabaseClosed(Database* database)