Example #1
0
void MemRequest::setStateAckDone(TimeDelta_t lat)
{
  MemRequest *orig = setStateAckOrig;
  if(orig==0)
		return;
  if (orig->mt == mt_setState)
    orig->needsDisp |= needsDisp;

  setStateAckOrig = 0;
  I(orig->pendingSetStateAck>0);
  orig->pendingSetStateAck--;
  if (orig->pendingSetStateAck<=0) {
    if(orig->mt == mt_req) {
      orig->redoReqCB.schedule(lat);
    }else if (orig->mt == mt_reqAck) {
      orig->redoReqAckCB.schedule(lat);
    }else if (orig->mt == mt_setState) {
      //I(orig->setStateAckOrig==0);
      //orig->ack();
      orig->convert2SetStateAck(orig->ma, orig->needsDisp);
			I(orig->currMemObj == orig->creatorObj);
			//orig->startSetStateAck();
      // NOTE: no PortManager because this message is already accounted
      orig->redoSetStateAckAbs(globalClock);
      //orig->setStateAckDone(); No recursive/dep chains for the moment
    }else{
      I(0);
    }
  }
}