Index: WebCore/dom/WorkerRunLoop.cpp |
=================================================================== |
--- WebCore/dom/WorkerRunLoop.cpp (revision 10232) |
+++ WebCore/dom/WorkerRunLoop.cpp (working copy) |
@@ -98,7 +98,7 @@ |
return m_defaultMode; |
} |
- bool operator()(PassRefPtr<WorkerRunLoop::Task> task) |
+ bool operator()(PassRefPtr<WorkerRunLoop::Task> task) const |
{ |
return m_defaultMode || m_mode == task->mode(); |
} |
@@ -163,21 +163,15 @@ |
return result; |
} |
-MessageQueueWaitResult WorkerRunLoop::runInMode(WorkerContext* context, ModePredicate& predicate) |
+MessageQueueWaitResult WorkerRunLoop::runInMode(WorkerContext* context, const ModePredicate& predicate) |
{ |
ASSERT(context); |
ASSERT(context->thread()); |
ASSERT(context->thread()->threadID() == currentThread()); |
+ double absoluteTime = (predicate.isDefaultMode() && m_sharedTimer->isActive()) ? m_sharedTimer->fireTime() : MessageQueue<RefPtr<Task> >::infiniteTime(); |
RefPtr<Task> task; |
- MessageQueueWaitResult result; |
- if (predicate.isDefaultMode()) { |
- if (m_sharedTimer->isActive()) |
- result = m_messageQueue.waitForMessageTimed(task, m_sharedTimer->fireTime()); |
- else |
- result = m_messageQueue.waitForMessage(task) ? MessageQueueMessageReceived : MessageQueueTerminated; |
- } else |
- result = m_messageQueue.waitForMessageFiltered(task, predicate); |
+ MessageQueueWaitResult result = m_messageQueue.waitForMessageFilteredWithTimeout(task, predicate, absoluteTime); |
switch (result) { |
case MessageQueueTerminated: |