kernel: pass ref in Process
This commit is contained in:
parent
213b259cf1
commit
9565091fc2
9 changed files with 20 additions and 16 deletions
|
@ -14,6 +14,7 @@ class AddressArbiter;
|
|||
class Event;
|
||||
class Mutex;
|
||||
class CodeSet;
|
||||
class Process;
|
||||
|
||||
enum class ResetType {
|
||||
OneShot,
|
||||
|
@ -53,6 +54,8 @@ public:
|
|||
SharedPtr<Mutex> CreateMutex(bool initial_locked, std::string name = "Unknown");
|
||||
|
||||
SharedPtr<CodeSet> CreateCodeSet(std::string name, u64 program_id);
|
||||
|
||||
SharedPtr<Process> CreateProcess(SharedPtr<CodeSet> code_set);
|
||||
};
|
||||
|
||||
} // namespace Kernel
|
||||
|
|
|
@ -34,8 +34,8 @@ CodeSet::~CodeSet() {}
|
|||
|
||||
u32 Process::next_process_id;
|
||||
|
||||
SharedPtr<Process> Process::Create(SharedPtr<CodeSet> code_set) {
|
||||
SharedPtr<Process> process(new Process);
|
||||
SharedPtr<Process> KernelSystem::CreateProcess(SharedPtr<CodeSet> code_set) {
|
||||
SharedPtr<Process> process(new Process(*this));
|
||||
|
||||
process->codeset = std::move(code_set);
|
||||
process->flags.raw = 0;
|
||||
|
@ -304,7 +304,7 @@ ResultCode Process::LinearFree(VAddr target, u32 size) {
|
|||
return RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
Kernel::Process::Process() {}
|
||||
Kernel::Process::Process(KernelSystem& kernel) : kernel(kernel) {}
|
||||
Kernel::Process::~Process() {}
|
||||
|
||||
void ClearProcessList() {
|
||||
|
|
|
@ -117,8 +117,6 @@ private:
|
|||
|
||||
class Process final : public Object {
|
||||
public:
|
||||
static SharedPtr<Process> Create(SharedPtr<CodeSet> code_set);
|
||||
|
||||
std::string GetTypeName() const override {
|
||||
return "Process";
|
||||
}
|
||||
|
@ -201,8 +199,11 @@ public:
|
|||
ResultCode LinearFree(VAddr target, u32 size);
|
||||
|
||||
private:
|
||||
Process();
|
||||
explicit Process(Kernel::KernelSystem& kernel);
|
||||
~Process() override;
|
||||
|
||||
friend class KernelSystem;
|
||||
KernelSystem& kernel;
|
||||
};
|
||||
|
||||
void ClearProcessList();
|
||||
|
|
|
@ -267,7 +267,7 @@ ResultStatus AppLoader_THREEDSX::Load(Kernel::SharedPtr<Kernel::Process>& proces
|
|||
return ResultStatus::Error;
|
||||
codeset->name = filename;
|
||||
|
||||
process = Kernel::Process::Create(std::move(codeset));
|
||||
process = Core::System::GetInstance().Kernel().CreateProcess(std::move(codeset));
|
||||
process->svc_access_mask.set();
|
||||
process->address_mappings = default_address_mappings;
|
||||
|
||||
|
|
|
@ -396,7 +396,7 @@ ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr<Kernel::Process>& process) {
|
|||
SharedPtr<CodeSet> codeset = elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR);
|
||||
codeset->name = filename;
|
||||
|
||||
process = Kernel::Process::Create(std::move(codeset));
|
||||
process = Core::System::GetInstance().Kernel().CreateProcess(std::move(codeset));
|
||||
process->svc_access_mask.set();
|
||||
process->address_mappings = default_address_mappings;
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ ResultStatus AppLoader_NCCH::LoadExec(Kernel::SharedPtr<Kernel::Process>& proces
|
|||
codeset->entrypoint = codeset->CodeSegment().addr;
|
||||
codeset->memory = std::make_shared<std::vector<u8>>(std::move(code));
|
||||
|
||||
process = Kernel::Process::Create(std::move(codeset));
|
||||
process = Core::System::GetInstance().Kernel().CreateProcess(std::move(codeset));
|
||||
|
||||
// Attach a resource limit to the process based on the resource limit category
|
||||
process->resource_limit =
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue