| 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;
|
| }
|
|
|