Example #1
0
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);
    }
  }
}
Example #2
0
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);
    }
  }
}
Example #3
0
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();
  }
}