Index: runtime/vm/message.cc |
=================================================================== |
--- runtime/vm/message.cc (revision 5107) |
+++ runtime/vm/message.cc (working copy) |
@@ -110,14 +110,23 @@ |
} |
} |
+ |
Message* MessageQueue::DequeueNoWait() { |
MonitorLocker ml(&monitor_); |
- return DequeueNoWaitHoldsLock(); |
+ return DequeueNoWaitHoldsLock(Message::kFirstPriority); |
} |
-Message* MessageQueue::DequeueNoWaitHoldsLock() { |
+ |
+Message* MessageQueue::DequeueNoWaitWithPriority( |
+ Message::Priority min_priority) { |
+ MonitorLocker ml(&monitor_); |
+ return DequeueNoWaitHoldsLock(min_priority); |
+} |
+ |
+ |
+Message* MessageQueue::DequeueNoWaitHoldsLock(Message::Priority min_priority) { |
// Look for the highest priority available message. |
- for (int p = Message::kNumPriorities-1; p >= Message::kFirstPriority; p--) { |
+ for (int p = Message::kNumPriorities-1; p >= min_priority; p--) { |
Message* result = head_[p]; |
if (result != NULL) { |
head_[p] = result->next_; |
@@ -138,11 +147,11 @@ |
Message* MessageQueue::Dequeue(int64_t millis) { |
ASSERT(millis >= 0); |
MonitorLocker ml(&monitor_); |
- Message* result = DequeueNoWaitHoldsLock(); |
+ Message* result = DequeueNoWaitHoldsLock(Message::kFirstPriority); |
if (result == NULL) { |
// No message available at any priority. |
monitor_.Wait(millis); |
- result = DequeueNoWaitHoldsLock(); |
+ result = DequeueNoWaitHoldsLock(Message::kFirstPriority); |
} |
return result; |
} |