RESOLVED FIXED 30805
Add MessageQueue::removeWithPredicate to remove certain tasks without pulling them from the queue.
https://bugs.webkit.org/show_bug.cgi?id=30805
Summary Add MessageQueue::removeWithPredicate to remove certain tasks without pulling...
Dmitry Titov
Reported 2009-10-26 21:07:52 PDT
As part of removing thread-safe refcounting from tasks, it makes sense to add the method on MessageQueue that would remove specified set of tasksk from the queue. Otherwise, this operation is done by removing tasksk from the queue and then re-inserting them back, which is longer, results in more locking operations and doesn't help bug 30612.
Attachments
Proposed patch. (4.14 KB, patch)
2009-10-28 12:06 PDT, Dmitry Titov
levin: review+
dimich: commit-queue-
Dmitry Titov
Comment 1 2009-10-28 12:06:06 PDT
Created attachment 42047 [details] Proposed patch.
David Levin
Comment 2 2009-10-28 13:54:28 PDT
Comment on attachment 42047 [details] Proposed patch. Just a few nits. Please fix and submit. > diff --git a/JavaScriptCore/wtf/MessageQueue.h b/JavaScriptCore/wtf/MessageQueue.h > + void removeWithPredicate(Predicate&); Consider using "removeIf" instead of "removeWithPredicate" (It is similar in naming to the findIf method on Deque). > + inline void MessageQueue<DataType>::removeWithPredicate(Predicate& predicate) > + { > + MutexLocker lock(m_mutex); > + DequeConstIterator<DataType> found = m_queue.end(); > + while ((found = m_queue.findIf(predicate)) != m_queue.end()) { > + m_queue.remove(found); ASSERT(0); Please remove "ASSERT(0);" > diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog > + (WebCore::SameDatabasePredicate::SameDatabasePredicate): Added predicate that flags the tasks belonging to specified database. Consider: to "a" specified database. > + (WebCore::DatabaseThread::unscheduleDatabaseTasks): changed to use new removeWithPredicate method. Consider: use "the" new removeWithPredicate
Dmitry Titov
Comment 3 2009-10-28 16:23:19 PDT
Note You need to log in before you can comment on or make changes to this bug.