void ExSequenceTcb::registerSubtasks() { ExScheduler *sched = getGlobals()->getScheduler(); ex_tcb :: registerSubtasks(); // Regsiter the I/O event, if overflow is possible if ( isUnboundedFollowing() ) { ioEventHandler_ = sched->registerNonQueueSubtask(sWork,this); // work around: The handler was just created, while clusterDb was created // earlier (in the TCB ctor), so update clusterDb now with the handler ex_assert( clusterDb_ , "Unlimited following and no clusterDb_") ; clusterDb_->ioEventHandler_ = ioEventHandler_ ; } };
void ExProbeCacheTcb::registerSubtasks() { ExScheduler *sched = getGlobals()->getScheduler(); sched->registerInsertSubtask(sWorkDown, this, qparent_.down,"PD"); sched->registerUnblockSubtask(sWorkDown, this, qchild_.down, "PD"); sched->registerInsertSubtask(sWorkUp, this, qchild_.up, "PU"); sched->registerUnblockSubtask(sWorkUp, this, qparent_.up, "PU"); sched->registerCancelSubtask(sCancel, this, qparent_.down,"CN"); // We need to schedule workUp from workDown if a call to workDown // has changed any request to either CACHE_HIT or CANCELED_NOT_STARTED // and if it has not changed any request to CACHE_MISS. workUpTask_ = sched->registerNonQueueSubtask(sWorkUp, this, "PU"); }
void ExVPJoinTcb::registerSubtasks() { ExScheduler *sched = getGlobals()->getScheduler(); // parent and child down queues are handled by workDown() sched->registerInsertSubtask(sWorkDown, this, qParent_.down, "Work Down"); sched->registerCancelSubtask(sWorkCancel, this, qParent_.down, "Work Cancel"); Int32 i; for (i=0; i<numChildren_; i++) { sched->registerUnblockSubtask(sWorkDown, this, qChild_[i].down); } // parent and child up queues are handled by workUp() sched->registerUnblockSubtask(sWorkUp, this, qParent_.up, "Work Up"); for (i=0; i<numChildren_; i++) { sched->registerInsertSubtask(sWorkUp, this, qChild_[i].up, "Work Up"); } // make an event through which we can tell the scheduler to call // workUp(). exceptionEvent_ = sched->registerNonQueueSubtask(sWorkUp, this); }