void petabricks::DynamicTask::decrementPredecessors(bool isAborting){ bool shouldEnqueue = false; { JLOCKSCOPE(_lock); --_numPredecessors; if(_numPredecessors==0 && _state==S_PENDING){ _state = S_READY; shouldEnqueue = true; } if(_numPredecessors==0 && _state==S_REMOTE_PENDING){ _state = S_REMOTE_READY; shouldEnqueue = true; } } if (shouldEnqueue) { if (isAborting) { runWrapper(true); } else if (_state==S_READY) { inlineOrEnqueueTask(); } else if (_state==S_REMOTE_READY) { remoteScheduleTask(); } else { JASSERT(false); } } }
void DynamicTask::enqueue() { incRefCount(); // matches with runWrapper() int preds; { JLOCKSCOPE(_lock); preds=_numPredecessors; if(_state==S_NEW) { if(preds==0) _state=S_READY; else _state=S_PENDING; }else if(_state==S_REMOTE_NEW){ if(preds==0) _state=S_REMOTE_READY; else _state=S_REMOTE_PENDING; }else{ JASSERT(false)(_state); } } if(preds==0) { if(_state == S_READY){ inlineOrEnqueueTask(); }else if(_state == S_REMOTE_READY){ remoteScheduleTask(); }else{ JASSERT(false)(_state); } } }
void DynamicTask::enqueue() { incRefCount(); // matches with runWrapper() int preds; { JLOCKSCOPE(_lock); preds=_numPredecessors; if(preds==0) _state=S_READY; else _state=S_PENDING; } if(preds==0) { inlineOrEnqueueTask(); } }