Kernel: Stop creating useless Handles during object creation
They're finally unnecessary, and will stop cluttering the application's handle table.
This commit is contained in:
parent
52f58e64ef
commit
88a4a808c6
18 changed files with 41 additions and 57 deletions
|
@ -18,14 +18,12 @@ namespace Kernel {
|
|||
AddressArbiter::AddressArbiter() {}
|
||||
AddressArbiter::~AddressArbiter() {}
|
||||
|
||||
ResultVal<SharedPtr<AddressArbiter>> AddressArbiter::Create(std::string name) {
|
||||
SharedPtr<AddressArbiter> AddressArbiter::Create(std::string name) {
|
||||
SharedPtr<AddressArbiter> address_arbiter(new AddressArbiter);
|
||||
// TOOD(yuriks): Don't create Handle (see Thread::Create())
|
||||
CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(address_arbiter));
|
||||
|
||||
address_arbiter->name = std::move(name);
|
||||
|
||||
return MakeResult<SharedPtr<AddressArbiter>>(std::move(address_arbiter));
|
||||
return address_arbiter;
|
||||
}
|
||||
|
||||
ResultCode AddressArbiter::ArbitrateAddress(ArbitrationType type, VAddr address, s32 value,
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
* @param name Optional name used for debugging.
|
||||
* @returns The created AddressArbiter.
|
||||
*/
|
||||
static ResultVal<SharedPtr<AddressArbiter>> Create(std::string name = "Unknown");
|
||||
static SharedPtr<AddressArbiter> Create(std::string name = "Unknown");
|
||||
|
||||
std::string GetTypeName() const override { return "Arbiter"; }
|
||||
std::string GetName() const override { return name; }
|
||||
|
|
|
@ -17,16 +17,14 @@ namespace Kernel {
|
|||
Event::Event() {}
|
||||
Event::~Event() {}
|
||||
|
||||
ResultVal<SharedPtr<Event>> Event::Create(ResetType reset_type, std::string name) {
|
||||
SharedPtr<Event> Event::Create(ResetType reset_type, std::string name) {
|
||||
SharedPtr<Event> evt(new Event);
|
||||
// TOOD(yuriks): Don't create Handle (see Thread::Create())
|
||||
CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(evt));
|
||||
|
||||
evt->signaled = false;
|
||||
evt->reset_type = evt->intitial_reset_type = reset_type;
|
||||
evt->name = std::move(name);
|
||||
|
||||
return MakeResult<SharedPtr<Event>>(evt);
|
||||
return evt;
|
||||
}
|
||||
|
||||
bool Event::ShouldWait() {
|
||||
|
|
|
@ -18,7 +18,7 @@ public:
|
|||
* @param reset_type ResetType describing how to create event
|
||||
* @param name Optional name of event
|
||||
*/
|
||||
static ResultVal<SharedPtr<Event>> Create(ResetType reset_type, std::string name = "Unknown");
|
||||
static SharedPtr<Event> Create(ResetType reset_type, std::string name = "Unknown");
|
||||
|
||||
std::string GetTypeName() const override { return "Event"; }
|
||||
std::string GetName() const override { return name; }
|
||||
|
|
|
@ -41,10 +41,8 @@ void ReleaseThreadMutexes(Thread* thread) {
|
|||
Mutex::Mutex() {}
|
||||
Mutex::~Mutex() {}
|
||||
|
||||
ResultVal<SharedPtr<Mutex>> Mutex::Create(bool initial_locked, std::string name) {
|
||||
SharedPtr<Mutex> Mutex::Create(bool initial_locked, std::string name) {
|
||||
SharedPtr<Mutex> mutex(new Mutex);
|
||||
// TOOD(yuriks): Don't create Handle (see Thread::Create())
|
||||
CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(mutex));
|
||||
|
||||
mutex->initial_locked = initial_locked;
|
||||
mutex->locked = false;
|
||||
|
@ -55,7 +53,7 @@ ResultVal<SharedPtr<Mutex>> Mutex::Create(bool initial_locked, std::string name)
|
|||
if (initial_locked)
|
||||
mutex->Acquire();
|
||||
|
||||
return MakeResult<SharedPtr<Mutex>>(mutex);
|
||||
return mutex;
|
||||
}
|
||||
|
||||
bool Mutex::ShouldWait() {
|
||||
|
|
|
@ -22,7 +22,7 @@ public:
|
|||
* @param name Optional name of mutex
|
||||
* @return Pointer to new Mutex object
|
||||
*/
|
||||
static ResultVal<SharedPtr<Mutex>> Create(bool initial_locked, std::string name = "Unknown");
|
||||
static SharedPtr<Mutex> Create(bool initial_locked, std::string name = "Unknown");
|
||||
|
||||
std::string GetTypeName() const override { return "Mutex"; }
|
||||
std::string GetName() const override { return name; }
|
||||
|
|
|
@ -21,8 +21,6 @@ ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_cou
|
|||
ErrorSummary::WrongArgument, ErrorLevel::Permanent);
|
||||
|
||||
SharedPtr<Semaphore> semaphore(new Semaphore);
|
||||
// TOOD(yuriks): Don't create Handle (see Thread::Create())
|
||||
CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(semaphore));
|
||||
|
||||
// When the semaphore is created, some slots are reserved for other threads,
|
||||
// and the rest is reserved for the caller thread
|
||||
|
|
|
@ -12,14 +12,12 @@ namespace Kernel {
|
|||
SharedMemory::SharedMemory() {}
|
||||
SharedMemory::~SharedMemory() {}
|
||||
|
||||
ResultVal<SharedPtr<SharedMemory>> SharedMemory::Create(std::string name) {
|
||||
SharedPtr<SharedMemory> SharedMemory::Create(std::string name) {
|
||||
SharedPtr<SharedMemory> shared_memory(new SharedMemory);
|
||||
|
||||
// TOOD(yuriks): Don't create Handle (see Thread::Create())
|
||||
CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(shared_memory));
|
||||
|
||||
shared_memory->name = std::move(name);
|
||||
return MakeResult<SharedPtr<SharedMemory>>(std::move(shared_memory));
|
||||
|
||||
return shared_memory;
|
||||
}
|
||||
|
||||
ResultCode SharedMemory::Map(VAddr address, MemoryPermission permissions,
|
||||
|
|
|
@ -29,7 +29,7 @@ public:
|
|||
* Creates a shared memory object
|
||||
* @param name Optional object name, used only for debugging purposes.
|
||||
*/
|
||||
static ResultVal<SharedPtr<SharedMemory>> Create(std::string name = "Unknown");
|
||||
static SharedPtr<SharedMemory> Create(std::string name = "Unknown");
|
||||
|
||||
std::string GetTypeName() const override { return "SharedMemory"; }
|
||||
|
||||
|
|
|
@ -368,14 +368,6 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
|
|||
|
||||
SharedPtr<Thread> thread(new Thread);
|
||||
|
||||
// TODO(yuriks): Thread requires a handle to be inserted into the various scheduling queues for
|
||||
// the time being. Create a handle here, it will be copied to the handle field in
|
||||
// the object and use by the rest of the code. This should be removed when other
|
||||
// code doesn't rely on the handle anymore.
|
||||
ResultVal<Handle> handle = Kernel::g_handle_table.Create(thread);
|
||||
if (handle.Failed())
|
||||
return handle.Code();
|
||||
|
||||
thread_list.push_back(thread);
|
||||
thread_ready_queue.prepare(priority);
|
||||
|
||||
|
|
|
@ -20,10 +20,8 @@ static Kernel::HandleTable timer_callback_handle_table;
|
|||
Timer::Timer() {}
|
||||
Timer::~Timer() {}
|
||||
|
||||
ResultVal<SharedPtr<Timer>> Timer::Create(ResetType reset_type, std::string name) {
|
||||
SharedPtr<Timer> Timer::Create(ResetType reset_type, std::string name) {
|
||||
SharedPtr<Timer> timer(new Timer);
|
||||
// TOOD(yuriks): Don't create Handle (see Thread::Create())
|
||||
CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(timer));
|
||||
|
||||
timer->reset_type = reset_type;
|
||||
timer->signaled = false;
|
||||
|
@ -31,7 +29,8 @@ ResultVal<SharedPtr<Timer>> Timer::Create(ResetType reset_type, std::string name
|
|||
timer->initial_delay = 0;
|
||||
timer->interval_delay = 0;
|
||||
timer->callback_handle = timer_callback_handle_table.Create(timer).MoveFrom();
|
||||
return MakeResult<SharedPtr<Timer>>(timer);
|
||||
|
||||
return timer;
|
||||
}
|
||||
|
||||
bool Timer::ShouldWait() {
|
||||
|
|
|
@ -19,7 +19,7 @@ public:
|
|||
* @param name Optional name of timer
|
||||
* @return The created Timer
|
||||
*/
|
||||
static ResultVal<SharedPtr<Timer>> Create(ResetType reset_type, std::string name = "Unknown");
|
||||
static SharedPtr<Timer> Create(ResetType reset_type, std::string name = "Unknown");
|
||||
|
||||
std::string GetTypeName() const override { return "Timer"; }
|
||||
std::string GetName() const override { return name; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue