void VMProcess::activate_system() { // Find the Delta level 'Processor' processOop proc = processOop(Universe::find_global("Processor")); if (!proc->is_process()) { klassOop scheduler_klass = klassOop(Universe::find_global("ProcessorScheduler")); proc = processOop(scheduler_klass->klass_part()->allocateObject()); associationOop assoc = Universe::find_global_association("Processor"); assoc->set_value(proc); } DeltaProcess::initialize_async_dll_event(); // Create the initial process DeltaProcess::set_scheduler(new DeltaProcess(proc, oopFactory::new_symbol("start"))); // Bind the scheduler to Processor proc->set_process(DeltaProcess::scheduler()); DeltaProcess::scheduler()->set_processObj(proc); // Transfer control to the scheduler transfer_to(DeltaProcess::scheduler()); // Call the ever running loop handling vm operations loop(); }
inline Process* checkProcess(oop p) { assert(p->is_process(), "not a process"); Process* proc = processOop(p)->process(); if (!proc || proc->processObj() != p) { return NULL; // dead process or a clone of a process obj } else { return proc; } }