kennel/process: move process list to kernel instance
This commit is contained in:
parent
4238754d8c
commit
d9342622b0
|
@ -7,6 +7,7 @@
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <boost/smart_ptr/intrusive_ptr.hpp>
|
#include <boost/smart_ptr/intrusive_ptr.hpp>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
|
@ -180,6 +181,9 @@ public:
|
||||||
|
|
||||||
u32 GenerateObjectID();
|
u32 GenerateObjectID();
|
||||||
|
|
||||||
|
/// Retrieves a process from the current list of processes.
|
||||||
|
SharedPtr<Process> GetProcessById(u32 process_id) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<ResourceLimitList> resource_limits;
|
std::unique_ptr<ResourceLimitList> resource_limits;
|
||||||
std::atomic<u32> next_object_id{0};
|
std::atomic<u32> next_object_id{0};
|
||||||
|
@ -187,6 +191,9 @@ private:
|
||||||
// TODO(Subv): Start the process ids from 10 for now, as lower PIDs are
|
// TODO(Subv): Start the process ids from 10 for now, as lower PIDs are
|
||||||
// reserved for low-level services
|
// reserved for low-level services
|
||||||
u32 next_process_id = 10;
|
u32 next_process_id = 10;
|
||||||
|
|
||||||
|
// Lists all processes that exist in the current session.
|
||||||
|
std::vector<SharedPtr<Process>> process_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
|
@ -17,9 +17,6 @@
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
// Lists all processes that exist in the current session.
|
|
||||||
static std::vector<SharedPtr<Process>> process_list;
|
|
||||||
|
|
||||||
SharedPtr<CodeSet> KernelSystem::CreateCodeSet(std::string name, u64 program_id) {
|
SharedPtr<CodeSet> KernelSystem::CreateCodeSet(std::string name, u64 program_id) {
|
||||||
SharedPtr<CodeSet> codeset(new CodeSet(*this));
|
SharedPtr<CodeSet> codeset(new CodeSet(*this));
|
||||||
|
|
||||||
|
@ -306,11 +303,7 @@ ResultCode Process::LinearFree(VAddr target, u32 size) {
|
||||||
Kernel::Process::Process(KernelSystem& kernel) : Object(kernel), kernel(kernel) {}
|
Kernel::Process::Process(KernelSystem& kernel) : Object(kernel), kernel(kernel) {}
|
||||||
Kernel::Process::~Process() {}
|
Kernel::Process::~Process() {}
|
||||||
|
|
||||||
void ClearProcessList() {
|
SharedPtr<Process> KernelSystem::GetProcessById(u32 process_id) const {
|
||||||
process_list.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedPtr<Process> GetProcessById(u32 process_id) {
|
|
||||||
auto itr = std::find_if(
|
auto itr = std::find_if(
|
||||||
process_list.begin(), process_list.end(),
|
process_list.begin(), process_list.end(),
|
||||||
[&](const SharedPtr<Process>& process) { return process->process_id == process_id; });
|
[&](const SharedPtr<Process>& process) { return process->process_id == process_id; });
|
||||||
|
|
|
@ -198,10 +198,5 @@ private:
|
||||||
KernelSystem& kernel;
|
KernelSystem& kernel;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ClearProcessList();
|
|
||||||
|
|
||||||
/// Retrieves a process from the current list of processes.
|
|
||||||
SharedPtr<Process> GetProcessById(u32 process_id);
|
|
||||||
|
|
||||||
extern SharedPtr<Process> g_current_process;
|
extern SharedPtr<Process> g_current_process;
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
|
@ -516,7 +516,6 @@ void ThreadingShutdown() {
|
||||||
}
|
}
|
||||||
thread_list.clear();
|
thread_list.clear();
|
||||||
ready_queue.clear();
|
ready_queue.clear();
|
||||||
ClearProcessList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<SharedPtr<Thread>>& GetThreadList() {
|
const std::vector<SharedPtr<Thread>>& GetThreadList() {
|
||||||
|
|
|
@ -619,7 +619,7 @@ void FS_USER::GetProgramLaunchInfo(Kernel::HLERequestContext& ctx) {
|
||||||
|
|
||||||
// TODO(Subv): The real FS service manages its own process list and only checks the processes
|
// TODO(Subv): The real FS service manages its own process list and only checks the processes
|
||||||
// that were registered with the 'fs:REG' service.
|
// that were registered with the 'fs:REG' service.
|
||||||
auto process = Kernel::GetProcessById(process_id);
|
auto process = system.Kernel().GetProcessById(process_id);
|
||||||
|
|
||||||
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
IPC::RequestBuilder rb = rp.MakeBuilder(5, 0);
|
||||||
|
|
||||||
|
|
Reference in New Issue