Commit e7268dee authored by tkent@chromium.org's avatar tkent@chromium.org

Oilpan: Prepare to move DatabaseThread and SQLTransactionCoordinator to Oilpan heap.

BUG=347902

Review URL: https://codereview.chromium.org/201083003

git-svn-id: svn://svn.chromium.org/blink/trunk@169594 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1561af56
......@@ -75,7 +75,7 @@ private:
void stopSyncDatabases();
RefPtr<DatabaseThread> m_databaseThread;
RefPtrWillBePersistent<DatabaseThread> m_databaseThread;
// The contents of m_openSyncDatabases are raw pointers. It's safe because
// DatabaseBackendSync is always closed before destruction.
HashSet<DatabaseBackendBase*> m_openSyncDatabases;
......
......@@ -42,7 +42,7 @@ namespace WebCore {
DatabaseThread::DatabaseThread()
: m_transactionClient(adoptPtr(new SQLTransactionClient()))
, m_transactionCoordinator(adoptPtr(new SQLTransactionCoordinator()))
, m_transactionCoordinator(adoptPtrWillBeNoop(new SQLTransactionCoordinator()))
, m_cleanupSync(0)
, m_terminationRequested(false)
{
......@@ -60,6 +60,12 @@ DatabaseThread::~DatabaseThread()
m_thread.clear();
}
void DatabaseThread::trace(Visitor* visitor)
{
visitor->trace(m_openDatabaseSet);
visitor->trace(m_transactionCoordinator);
}
void DatabaseThread::start()
{
if (m_thread)
......
......@@ -51,10 +51,11 @@ class PendingGCRunner;
class SQLTransactionClient;
class SQLTransactionCoordinator;
class DatabaseThread : public ThreadSafeRefCounted<DatabaseThread> {
class DatabaseThread : public ThreadSafeRefCountedWillBeGarbageCollectedFinalized<DatabaseThread> {
public:
static PassRefPtr<DatabaseThread> create() { return adoptRef(new DatabaseThread); }
static PassRefPtrWillBeRawPtr<DatabaseThread> create() { return adoptRefWillBeNoop(new DatabaseThread); }
~DatabaseThread();
void trace(Visitor*);
void start();
void requestTermination(DatabaseTaskSynchronizer* cleanupSync);
......@@ -83,10 +84,10 @@ private:
// This set keeps track of the open databases that have been used on this thread.
// This must be updated in the database thread though it is constructed and
// destructed in the context thread.
WillBePersistentHeapHashSet<RefPtrWillBeMember<DatabaseBackend> > m_openDatabaseSet;
WillBeHeapHashSet<RefPtrWillBeMember<DatabaseBackend> > m_openDatabaseSet;
OwnPtr<SQLTransactionClient> m_transactionClient;
OwnPtr<SQLTransactionCoordinator> m_transactionCoordinator;
OwnPtrWillBeMember<SQLTransactionCoordinator> m_transactionCoordinator;
DatabaseTaskSynchronizer* m_cleanupSync;
mutable Mutex m_terminationRequestedMutex;
......
......@@ -49,6 +49,11 @@ SQLTransactionCoordinator::SQLTransactionCoordinator()
{
}
void SQLTransactionCoordinator::trace(Visitor* visitor)
{
visitor->trace(m_coordinationInfoMap);
}
void SQLTransactionCoordinator::processPendingTransactions(CoordinationInfo& info)
{
if (info.activeWriteTransaction || info.pendingTransactions.isEmpty())
......
......@@ -43,10 +43,12 @@ namespace WebCore {
class SQLTransactionBackend;
class SQLTransactionCoordinator {
WTF_MAKE_NONCOPYABLE(SQLTransactionCoordinator); WTF_MAKE_FAST_ALLOCATED;
class SQLTransactionCoordinator : public NoBaseWillBeGarbageCollected<SQLTransactionCoordinator> {
WTF_MAKE_NONCOPYABLE(SQLTransactionCoordinator);
WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
public:
SQLTransactionCoordinator();
void trace(Visitor*);
void acquireLock(SQLTransactionBackend*);
void releaseLock(SQLTransactionBackend*);
void shutdown();
......@@ -66,7 +68,7 @@ private:
ALLOW_ONLY_INLINE_ALLOCATION();
};
// Maps database names to information about pending transactions
typedef WillBePersistentHeapHashMap<String, CoordinationInfo> CoordinationInfoHeapMap;
typedef WillBeHeapHashMap<String, CoordinationInfo> CoordinationInfoHeapMap;
CoordinationInfoHeapMap m_coordinationInfoMap;
bool m_isShuttingDown;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment