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

Oilpan: Prepare to move AbstractSQLStatementBackend and SQLStatementBackend to Oilpan heap.

They are ThreadSafeRefCounted because an object is created in a context thread,
is enqueued into a SQLTransactionBackend, the SQLTransactionBackend is moved to
a database thread, then the database thread takes a SQLStatementBackend in the
queue.
We don't need to care about it in Oilpan. SQLTransactionBackend is correctly
transferred with CrossThreadPersistent.

BUG=347902

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

git-svn-id: svn://svn.chromium.org/blink/trunk@169622 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 491fa909
......@@ -26,15 +26,17 @@
#ifndef AbstractSQLStatementBackend_h
#define AbstractSQLStatementBackend_h
#include "heap/Handle.h"
#include "modules/webdatabase/SQLError.h"
#include "modules/webdatabase/SQLResultSet.h"
#include "wtf/ThreadSafeRefCounted.h"
namespace WebCore {
class AbstractSQLStatementBackend : public ThreadSafeRefCounted<AbstractSQLStatementBackend> {
class AbstractSQLStatementBackend : public ThreadSafeRefCountedWillBeGarbageCollectedFinalized<AbstractSQLStatementBackend> {
public:
virtual ~AbstractSQLStatementBackend() { }
virtual void trace(Visitor*) = 0;
virtual PassRefPtr<SQLError> sqlError() const = 0;
virtual PassRefPtr<SQLResultSet> sqlResultSet() const = 0;
......
......@@ -71,10 +71,10 @@
namespace WebCore {
PassRefPtr<SQLStatementBackend> SQLStatementBackend::create(PassOwnPtr<AbstractSQLStatement> frontend,
PassRefPtrWillBeRawPtr<SQLStatementBackend> SQLStatementBackend::create(PassOwnPtr<AbstractSQLStatement> frontend,
const String& statement, const Vector<SQLValue>& arguments, int permissions)
{
return adoptRef(new SQLStatementBackend(frontend, statement, arguments, permissions));
return adoptRefWillBeNoop(new SQLStatementBackend(frontend, statement, arguments, permissions));
}
SQLStatementBackend::SQLStatementBackend(PassOwnPtr<AbstractSQLStatement> frontend,
......@@ -89,6 +89,10 @@ SQLStatementBackend::SQLStatementBackend(PassOwnPtr<AbstractSQLStatement> fronte
m_frontend->setBackend(this);
}
void SQLStatementBackend::trace(Visitor*)
{
}
AbstractSQLStatement* SQLStatementBackend::frontend()
{
return m_frontend.get();
......
......@@ -44,8 +44,9 @@ class SQLTransactionBackend;
class SQLStatementBackend FINAL : public AbstractSQLStatementBackend {
public:
static PassRefPtr<SQLStatementBackend> create(PassOwnPtr<AbstractSQLStatement>,
static PassRefPtrWillBeRawPtr<SQLStatementBackend> create(PassOwnPtr<AbstractSQLStatement>,
const String& sqlStatement, const Vector<SQLValue>& arguments, int permissions);
virtual void trace(Visitor*) OVERRIDE;
bool execute(DatabaseBackend*);
bool lastExecutionFailedDueToQuota() const;
......
......@@ -373,7 +373,9 @@ SQLTransactionBackend::~SQLTransactionBackend()
void SQLTransactionBackend::trace(Visitor* visitor)
{
visitor->trace(m_frontend);
visitor->trace(m_currentStatementBackend);
visitor->trace(m_database);
visitor->trace(m_statementQueue);
}
void SQLTransactionBackend::doCleanup()
......@@ -466,7 +468,7 @@ SQLTransactionBackend::StateFunction SQLTransactionBackend::stateFunctionFor(SQL
return stateFunctions[static_cast<int>(state)];
}
void SQLTransactionBackend::enqueueStatementBackend(PassRefPtr<SQLStatementBackend> statementBackend)
void SQLTransactionBackend::enqueueStatementBackend(PassRefPtrWillBeRawPtr<SQLStatementBackend> statementBackend)
{
MutexLocker locker(m_statementMutex);
m_statementQueue.append(statementBackend);
......@@ -521,9 +523,7 @@ void SQLTransactionBackend::performNextStep()
void SQLTransactionBackend::executeSQL(PassOwnPtr<AbstractSQLStatement> statement,
const String& sqlStatement, const Vector<SQLValue>& arguments, int permissions)
{
RefPtr<SQLStatementBackend> statementBackend;
statementBackend = SQLStatementBackend::create(statement, sqlStatement, arguments, permissions);
enqueueStatementBackend(statementBackend);
enqueueStatementBackend(SQLStatementBackend::create(statement, sqlStatement, arguments, permissions));
}
void SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown()
......
......@@ -86,7 +86,7 @@ private:
void doCleanup();
void enqueueStatementBackend(PassRefPtr<SQLStatementBackend>);
void enqueueStatementBackend(PassRefPtrWillBeRawPtr<SQLStatementBackend>);
// State Machine functions:
virtual StateFunction stateFunctionFor(SQLTransactionState) OVERRIDE;
......@@ -110,7 +110,7 @@ private:
void getNextStatement();
RefPtrWillBeMember<AbstractSQLTransaction> m_frontend; // Has a reference cycle, and will break in doCleanup().
RefPtr<SQLStatementBackend> m_currentStatementBackend;
RefPtrWillBeMember<SQLStatementBackend> m_currentStatementBackend;
RefPtrWillBeMember<DatabaseBackend> m_database;
RefPtr<SQLTransactionWrapper> m_wrapper;
......@@ -126,7 +126,7 @@ private:
bool m_hasVersionMismatch;
Mutex m_statementMutex;
Deque<RefPtr<SQLStatementBackend> > m_statementQueue;
Deque<RefPtrWillBeMember<SQLStatementBackend> > m_statementQueue;
OwnPtr<SQLiteTransaction> m_sqliteTransaction;
};
......
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