package javax.safetycritical;
import vm.Memory;
class ScjAperiodicEventHandlerProcess extends ScjProcess {
ScjAperiodicEventHandlerProcess(ManagedSchedulable handler, int[] stack) {
super(handler, stack);
}
protected void gotoNextState(PriorityFrame pFrame)
{
if (state == ScjProcess.State.HANDLED) {
// AperiodicEventHandler finished handling
if (Mission.getMission().terminationPending()) {
Mission.getMission().msSetForMission
.removeMSObject(msObject);
// remove the rest of aperiodic handlers
Mission.getMission().msSetForMission
.removeAperiodicHandlers();
state = ScjProcess.State.TERMINATED;
}
else {
// block it and can be released again
state = ScjProcess.State.BLOCKED;
}
return;
}
else if (state == ScjProcess.State.WAITING) {
;
}
else if (state == ScjProcess.State.REQUIRELOCK) {
;
}
else {
state = ScjProcess.State.READY;
pFrame.readyQueue.insert(this);
}
}
void switchToPrivateMemArea() {
Memory.switchToArea(((ManagedEventHandler)msObject).privateMemory.getDelegate());
}
}