|
|
|
@ -133,7 +133,7 @@ void Process::PrepareForTermination() {
|
|
|
|
|
if (thread->GetOwnerProcess() != this)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
if (thread == GetCurrentThread())
|
|
|
|
|
if (thread == system.CurrentScheduler().GetCurrentThread())
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
// TODO(Subv): When are the other running/ready threads terminated?
|
|
|
|
@ -145,7 +145,6 @@ void Process::PrepareForTermination() {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const auto& system = Core::System::GetInstance();
|
|
|
|
|
stop_threads(system.Scheduler(0).GetThreadList());
|
|
|
|
|
stop_threads(system.Scheduler(1).GetThreadList());
|
|
|
|
|
stop_threads(system.Scheduler(2).GetThreadList());
|
|
|
|
@ -228,13 +227,11 @@ void Process::LoadModule(CodeSet module_, VAddr base_addr) {
|
|
|
|
|
MapSegment(module_.DataSegment(), VMAPermission::ReadWrite, MemoryState::CodeMutable);
|
|
|
|
|
|
|
|
|
|
// Clear instruction cache in CPU JIT
|
|
|
|
|
Core::System::GetInstance().ArmInterface(0).ClearInstructionCache();
|
|
|
|
|
Core::System::GetInstance().ArmInterface(1).ClearInstructionCache();
|
|
|
|
|
Core::System::GetInstance().ArmInterface(2).ClearInstructionCache();
|
|
|
|
|
Core::System::GetInstance().ArmInterface(3).ClearInstructionCache();
|
|
|
|
|
system.InvalidateCpuInstructionCaches();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Process::Process(Core::System& system) : WaitObject{system.Kernel()}, address_arbiter{system} {}
|
|
|
|
|
Process::Process(Core::System& system)
|
|
|
|
|
: WaitObject{system.Kernel()}, address_arbiter{system}, system{system} {}
|
|
|
|
|
Process::~Process() = default;
|
|
|
|
|
|
|
|
|
|
void Process::Acquire(Thread* thread) {
|
|
|
|
|