diff options
Diffstat (limited to 'WebCore/storage/DatabaseThread.cpp')
-rw-r--r-- | WebCore/storage/DatabaseThread.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/WebCore/storage/DatabaseThread.cpp b/WebCore/storage/DatabaseThread.cpp index 9e3afdd..40c83ee 100644 --- a/WebCore/storage/DatabaseThread.cpp +++ b/WebCore/storage/DatabaseThread.cpp @@ -152,22 +152,20 @@ void DatabaseThread::scheduleImmediateTask(PassRefPtr<DatabaseTask> task) m_queue.prepend(task); } +class SameDatabasePredicate { +public: + SameDatabasePredicate(const Database* database) : m_database(database) { } + bool operator()(RefPtr<DatabaseTask>& task) const { return task->database() == m_database; } +private: + const Database* m_database; +}; + void DatabaseThread::unscheduleDatabaseTasks(Database* database) { // Note that the thread loop is running, so some tasks for the database // may still be executed. This is unavoidable. - - Deque<RefPtr<DatabaseTask> > filteredReverseQueue; - RefPtr<DatabaseTask> task; - while (m_queue.tryGetMessage(task)) { - if (task->database() != database) - filteredReverseQueue.append(task); - } - - while (!filteredReverseQueue.isEmpty()) { - m_queue.append(filteredReverseQueue.first()); - filteredReverseQueue.removeFirst(); - } + SameDatabasePredicate predicate(database); + m_queue.removeIf(predicate); } } // namespace WebCore |