| 524 | } |
| 525 | |
| 526 | inline |
| 527 | TaskQueue::WorkItem |
| 528 | TaskQueue::grabWorkItem() |
| 529 | { |
| 530 | //========================= LOCKED SCOPE ========================= |
| 531 | SpinLock::Guard lock(_runQueueLock); |
| 532 | if ((_queueIt == _runQueue.end()) || (!_isAdvanced && (++_queueIt == _runQueue.end()))) |
| 533 | { |
| 534 | acquireWaiting(); |
| 535 | } |
| 536 | _isAdvanced = false; //reset flag |
| 537 | _isIdle = _runQueue.empty(); |
| 538 | if (_runQueue.empty()) |
| 539 | { |
| 540 | return WorkItem(nullptr, _runQueue.end(), _isBlocked, _queueRound); |
| 541 | } |
| 542 | return WorkItem((*_queueIt), _queueIt, false, 0); |
| 543 | } |
| 544 | |
| 545 | inline |
| 546 | void TaskQueue::onBlockedTask(WorkItem& entry) |