diff options
Diffstat (limited to 'WebCore/storage/Database.cpp')
-rw-r--r-- | WebCore/storage/Database.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/WebCore/storage/Database.cpp b/WebCore/storage/Database.cpp index 9550083..961310d 100644 --- a/WebCore/storage/Database.cpp +++ b/WebCore/storage/Database.cpp @@ -183,13 +183,12 @@ String Database::version() const bool Database::openAndVerifyVersion(bool setVersionInNewDatabase, ExceptionCode& e) { - if (!m_scriptExecutionContext->databaseThread()) + DatabaseTaskSynchronizer synchronizer; + if (!m_scriptExecutionContext->databaseThread() || m_scriptExecutionContext->databaseThread()->terminationRequested(&synchronizer)) return false; bool success = false; - DatabaseTaskSynchronizer synchronizer; OwnPtr<DatabaseOpenTask> task = DatabaseOpenTask::create(this, setVersionInNewDatabase, &synchronizer, e, success); - m_scriptExecutionContext->databaseThread()->scheduleImmediateTask(task.release()); synchronizer.waitForTaskCompletion(); @@ -204,14 +203,13 @@ void Database::markAsDeletedAndClose() LOG(StorageAPI, "Marking %s (%p) as deleted", stringIdentifier().ascii().data(), this); m_deleted = true; - if (m_scriptExecutionContext->databaseThread()->terminationRequested()) { + DatabaseTaskSynchronizer synchronizer; + if (m_scriptExecutionContext->databaseThread()->terminationRequested(&synchronizer)) { LOG(StorageAPI, "Database handle %p is on a terminated DatabaseThread, cannot be marked for normal closure\n", this); return; } - DatabaseTaskSynchronizer synchronizer; OwnPtr<DatabaseCloseTask> task = DatabaseCloseTask::create(this, &synchronizer); - m_scriptExecutionContext->databaseThread()->scheduleImmediateTask(task.release()); synchronizer.waitForTaskCompletion(); } @@ -397,12 +395,11 @@ Vector<String> Database::tableNames() // FIXME: Not using threadsafeCopy on these strings looks ok since threads take strict turns // in dealing with them. However, if the code changes, this may not be true anymore. Vector<String> result; - if (!m_scriptExecutionContext->databaseThread()) + DatabaseTaskSynchronizer synchronizer; + if (!m_scriptExecutionContext->databaseThread() || m_scriptExecutionContext->databaseThread()->terminationRequested(&synchronizer)) return result; - DatabaseTaskSynchronizer synchronizer; OwnPtr<DatabaseTableNamesTask> task = DatabaseTableNamesTask::create(this, &synchronizer, result); - m_scriptExecutionContext->databaseThread()->scheduleImmediateTask(task.release()); synchronizer.waitForTaskCompletion(); |