summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2015-02-01 00:14:40 -0200
committerGravatar Yuri Kunde Schlesner2015-02-02 15:37:09 -0200
commit88a4a808c688eeabb136e9b45223a0e9c95896bc (patch)
treec4181a69ff882e1af1b7d65bf3596a6cb3dd88b9 /src/core
parentKernel: Make WaitObjects share ownership of Threads waiting on them (diff)
downloadyuzu-88a4a808c688eeabb136e9b45223a0e9c95896bc.tar.gz
yuzu-88a4a808c688eeabb136e9b45223a0e9c95896bc.tar.xz
yuzu-88a4a808c688eeabb136e9b45223a0e9c95896bc.zip
Kernel: Stop creating useless Handles during object creation
They're finally unnecessary, and will stop cluttering the application's handle table.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hle/kernel/address_arbiter.cpp6
-rw-r--r--src/core/hle/kernel/address_arbiter.h2
-rw-r--r--src/core/hle/kernel/event.cpp6
-rw-r--r--src/core/hle/kernel/event.h2
-rw-r--r--src/core/hle/kernel/mutex.cpp6
-rw-r--r--src/core/hle/kernel/mutex.h2
-rw-r--r--src/core/hle/kernel/semaphore.cpp2
-rw-r--r--src/core/hle/kernel/shared_memory.cpp8
-rw-r--r--src/core/hle/kernel/shared_memory.h2
-rw-r--r--src/core/hle/kernel/thread.cpp8
-rw-r--r--src/core/hle/kernel/timer.cpp7
-rw-r--r--src/core/hle/kernel/timer.h2
-rw-r--r--src/core/hle/service/apt_u.cpp8
-rw-r--r--src/core/hle/service/dsp_dsp.cpp3
-rw-r--r--src/core/hle/service/gsp_gpu.cpp2
-rw-r--r--src/core/hle/service/hid/hid.cpp12
-rw-r--r--src/core/hle/service/srv.cpp2
-rw-r--r--src/core/hle/svc.cpp18
18 files changed, 41 insertions, 57 deletions
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp
index 2084f24cc..42f8ce2d9 100644
--- a/src/core/hle/kernel/address_arbiter.cpp
+++ b/src/core/hle/kernel/address_arbiter.cpp
@@ -18,14 +18,12 @@ namespace Kernel {
18AddressArbiter::AddressArbiter() {} 18AddressArbiter::AddressArbiter() {}
19AddressArbiter::~AddressArbiter() {} 19AddressArbiter::~AddressArbiter() {}
20 20
21ResultVal<SharedPtr<AddressArbiter>> AddressArbiter::Create(std::string name) { 21SharedPtr<AddressArbiter> AddressArbiter::Create(std::string name) {
22 SharedPtr<AddressArbiter> address_arbiter(new AddressArbiter); 22 SharedPtr<AddressArbiter> address_arbiter(new AddressArbiter);
23 // TOOD(yuriks): Don't create Handle (see Thread::Create())
24 CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(address_arbiter));
25 23
26 address_arbiter->name = std::move(name); 24 address_arbiter->name = std::move(name);
27 25
28 return MakeResult<SharedPtr<AddressArbiter>>(std::move(address_arbiter)); 26 return address_arbiter;
29} 27}
30 28
31ResultCode AddressArbiter::ArbitrateAddress(ArbitrationType type, VAddr address, s32 value, 29ResultCode AddressArbiter::ArbitrateAddress(ArbitrationType type, VAddr address, s32 value,
diff --git a/src/core/hle/kernel/address_arbiter.h b/src/core/hle/kernel/address_arbiter.h
index a616d840f..8f6a1a8df 100644
--- a/src/core/hle/kernel/address_arbiter.h
+++ b/src/core/hle/kernel/address_arbiter.h
@@ -34,7 +34,7 @@ public:
34 * @param name Optional name used for debugging. 34 * @param name Optional name used for debugging.
35 * @returns The created AddressArbiter. 35 * @returns The created AddressArbiter.
36 */ 36 */
37 static ResultVal<SharedPtr<AddressArbiter>> Create(std::string name = "Unknown"); 37 static SharedPtr<AddressArbiter> Create(std::string name = "Unknown");
38 38
39 std::string GetTypeName() const override { return "Arbiter"; } 39 std::string GetTypeName() const override { return "Arbiter"; }
40 std::string GetName() const override { return name; } 40 std::string GetName() const override { return name; }
diff --git a/src/core/hle/kernel/event.cpp b/src/core/hle/kernel/event.cpp
index 3796fbb74..898e1c98f 100644
--- a/src/core/hle/kernel/event.cpp
+++ b/src/core/hle/kernel/event.cpp
@@ -17,16 +17,14 @@ namespace Kernel {
17Event::Event() {} 17Event::Event() {}
18Event::~Event() {} 18Event::~Event() {}
19 19
20ResultVal<SharedPtr<Event>> Event::Create(ResetType reset_type, std::string name) { 20SharedPtr<Event> Event::Create(ResetType reset_type, std::string name) {
21 SharedPtr<Event> evt(new Event); 21 SharedPtr<Event> evt(new Event);
22 // TOOD(yuriks): Don't create Handle (see Thread::Create())
23 CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(evt));
24 22
25 evt->signaled = false; 23 evt->signaled = false;
26 evt->reset_type = evt->intitial_reset_type = reset_type; 24 evt->reset_type = evt->intitial_reset_type = reset_type;
27 evt->name = std::move(name); 25 evt->name = std::move(name);
28 26
29 return MakeResult<SharedPtr<Event>>(evt); 27 return evt;
30} 28}
31 29
32bool Event::ShouldWait() { 30bool Event::ShouldWait() {
diff --git a/src/core/hle/kernel/event.h b/src/core/hle/kernel/event.h
index 6f88afb3e..fba960d2a 100644
--- a/src/core/hle/kernel/event.h
+++ b/src/core/hle/kernel/event.h
@@ -18,7 +18,7 @@ public:
18 * @param reset_type ResetType describing how to create event 18 * @param reset_type ResetType describing how to create event
19 * @param name Optional name of event 19 * @param name Optional name of event
20 */ 20 */
21 static ResultVal<SharedPtr<Event>> Create(ResetType reset_type, std::string name = "Unknown"); 21 static SharedPtr<Event> Create(ResetType reset_type, std::string name = "Unknown");
22 22
23 std::string GetTypeName() const override { return "Event"; } 23 std::string GetTypeName() const override { return "Event"; }
24 std::string GetName() const override { return name; } 24 std::string GetName() const override { return name; }
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp
index 7c634f9bd..9f7166ca4 100644
--- a/src/core/hle/kernel/mutex.cpp
+++ b/src/core/hle/kernel/mutex.cpp
@@ -41,10 +41,8 @@ void ReleaseThreadMutexes(Thread* thread) {
41Mutex::Mutex() {} 41Mutex::Mutex() {}
42Mutex::~Mutex() {} 42Mutex::~Mutex() {}
43 43
44ResultVal<SharedPtr<Mutex>> Mutex::Create(bool initial_locked, std::string name) { 44SharedPtr<Mutex> Mutex::Create(bool initial_locked, std::string name) {
45 SharedPtr<Mutex> mutex(new Mutex); 45 SharedPtr<Mutex> mutex(new Mutex);
46 // TOOD(yuriks): Don't create Handle (see Thread::Create())
47 CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(mutex));
48 46
49 mutex->initial_locked = initial_locked; 47 mutex->initial_locked = initial_locked;
50 mutex->locked = false; 48 mutex->locked = false;
@@ -55,7 +53,7 @@ ResultVal<SharedPtr<Mutex>> Mutex::Create(bool initial_locked, std::string name)
55 if (initial_locked) 53 if (initial_locked)
56 mutex->Acquire(); 54 mutex->Acquire();
57 55
58 return MakeResult<SharedPtr<Mutex>>(mutex); 56 return mutex;
59} 57}
60 58
61bool Mutex::ShouldWait() { 59bool Mutex::ShouldWait() {
diff --git a/src/core/hle/kernel/mutex.h b/src/core/hle/kernel/mutex.h
index cdd79e265..548403614 100644
--- a/src/core/hle/kernel/mutex.h
+++ b/src/core/hle/kernel/mutex.h
@@ -22,7 +22,7 @@ public:
22 * @param name Optional name of mutex 22 * @param name Optional name of mutex
23 * @return Pointer to new Mutex object 23 * @return Pointer to new Mutex object
24 */ 24 */
25 static ResultVal<SharedPtr<Mutex>> Create(bool initial_locked, std::string name = "Unknown"); 25 static SharedPtr<Mutex> Create(bool initial_locked, std::string name = "Unknown");
26 26
27 std::string GetTypeName() const override { return "Mutex"; } 27 std::string GetTypeName() const override { return "Mutex"; }
28 std::string GetName() const override { return name; } 28 std::string GetName() const override { return name; }
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp
index 234d60d85..c8cf8b9a2 100644
--- a/src/core/hle/kernel/semaphore.cpp
+++ b/src/core/hle/kernel/semaphore.cpp
@@ -21,8 +21,6 @@ ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_cou
21 ErrorSummary::WrongArgument, ErrorLevel::Permanent); 21 ErrorSummary::WrongArgument, ErrorLevel::Permanent);
22 22
23 SharedPtr<Semaphore> semaphore(new Semaphore); 23 SharedPtr<Semaphore> semaphore(new Semaphore);
24 // TOOD(yuriks): Don't create Handle (see Thread::Create())
25 CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(semaphore));
26 24
27 // When the semaphore is created, some slots are reserved for other threads, 25 // When the semaphore is created, some slots are reserved for other threads,
28 // and the rest is reserved for the caller thread 26 // and the rest is reserved for the caller thread
diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp
index c429bb9b4..4211fcf04 100644
--- a/src/core/hle/kernel/shared_memory.cpp
+++ b/src/core/hle/kernel/shared_memory.cpp
@@ -12,14 +12,12 @@ namespace Kernel {
12SharedMemory::SharedMemory() {} 12SharedMemory::SharedMemory() {}
13SharedMemory::~SharedMemory() {} 13SharedMemory::~SharedMemory() {}
14 14
15ResultVal<SharedPtr<SharedMemory>> SharedMemory::Create(std::string name) { 15SharedPtr<SharedMemory> SharedMemory::Create(std::string name) {
16 SharedPtr<SharedMemory> shared_memory(new SharedMemory); 16 SharedPtr<SharedMemory> shared_memory(new SharedMemory);
17 17
18 // TOOD(yuriks): Don't create Handle (see Thread::Create())
19 CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(shared_memory));
20
21 shared_memory->name = std::move(name); 18 shared_memory->name = std::move(name);
22 return MakeResult<SharedPtr<SharedMemory>>(std::move(shared_memory)); 19
20 return shared_memory;
23} 21}
24 22
25ResultCode SharedMemory::Map(VAddr address, MemoryPermission permissions, 23ResultCode SharedMemory::Map(VAddr address, MemoryPermission permissions,
diff --git a/src/core/hle/kernel/shared_memory.h b/src/core/hle/kernel/shared_memory.h
index d9e741d20..5833b411c 100644
--- a/src/core/hle/kernel/shared_memory.h
+++ b/src/core/hle/kernel/shared_memory.h
@@ -29,7 +29,7 @@ public:
29 * Creates a shared memory object 29 * Creates a shared memory object
30 * @param name Optional object name, used only for debugging purposes. 30 * @param name Optional object name, used only for debugging purposes.
31 */ 31 */
32 static ResultVal<SharedPtr<SharedMemory>> Create(std::string name = "Unknown"); 32 static SharedPtr<SharedMemory> Create(std::string name = "Unknown");
33 33
34 std::string GetTypeName() const override { return "SharedMemory"; } 34 std::string GetTypeName() const override { return "SharedMemory"; }
35 35
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index f092916dd..3987f9608 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -368,14 +368,6 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
368 368
369 SharedPtr<Thread> thread(new Thread); 369 SharedPtr<Thread> thread(new Thread);
370 370
371 // TODO(yuriks): Thread requires a handle to be inserted into the various scheduling queues for
372 // the time being. Create a handle here, it will be copied to the handle field in
373 // the object and use by the rest of the code. This should be removed when other
374 // code doesn't rely on the handle anymore.
375 ResultVal<Handle> handle = Kernel::g_handle_table.Create(thread);
376 if (handle.Failed())
377 return handle.Code();
378
379 thread_list.push_back(thread); 371 thread_list.push_back(thread);
380 thread_ready_queue.prepare(priority); 372 thread_ready_queue.prepare(priority);
381 373
diff --git a/src/core/hle/kernel/timer.cpp b/src/core/hle/kernel/timer.cpp
index 7c3cdc0d0..4352fc99c 100644
--- a/src/core/hle/kernel/timer.cpp
+++ b/src/core/hle/kernel/timer.cpp
@@ -20,10 +20,8 @@ static Kernel::HandleTable timer_callback_handle_table;
20Timer::Timer() {} 20Timer::Timer() {}
21Timer::~Timer() {} 21Timer::~Timer() {}
22 22
23ResultVal<SharedPtr<Timer>> Timer::Create(ResetType reset_type, std::string name) { 23SharedPtr<Timer> Timer::Create(ResetType reset_type, std::string name) {
24 SharedPtr<Timer> timer(new Timer); 24 SharedPtr<Timer> timer(new Timer);
25 // TOOD(yuriks): Don't create Handle (see Thread::Create())
26 CASCADE_RESULT(auto unused, Kernel::g_handle_table.Create(timer));
27 25
28 timer->reset_type = reset_type; 26 timer->reset_type = reset_type;
29 timer->signaled = false; 27 timer->signaled = false;
@@ -31,7 +29,8 @@ ResultVal<SharedPtr<Timer>> Timer::Create(ResetType reset_type, std::string name
31 timer->initial_delay = 0; 29 timer->initial_delay = 0;
32 timer->interval_delay = 0; 30 timer->interval_delay = 0;
33 timer->callback_handle = timer_callback_handle_table.Create(timer).MoveFrom(); 31 timer->callback_handle = timer_callback_handle_table.Create(timer).MoveFrom();
34 return MakeResult<SharedPtr<Timer>>(timer); 32
33 return timer;
35} 34}
36 35
37bool Timer::ShouldWait() { 36bool Timer::ShouldWait() {
diff --git a/src/core/hle/kernel/timer.h b/src/core/hle/kernel/timer.h
index e217d6dae..540e4e187 100644
--- a/src/core/hle/kernel/timer.h
+++ b/src/core/hle/kernel/timer.h
@@ -19,7 +19,7 @@ public:
19 * @param name Optional name of timer 19 * @param name Optional name of timer
20 * @return The created Timer 20 * @return The created Timer
21 */ 21 */
22 static ResultVal<SharedPtr<Timer>> Create(ResetType reset_type, std::string name = "Unknown"); 22 static SharedPtr<Timer> Create(ResetType reset_type, std::string name = "Unknown");
23 23
24 std::string GetTypeName() const override { return "Timer"; } 24 std::string GetTypeName() const override { return "Timer"; }
25 std::string GetName() const override { return name; } 25 std::string GetName() const override { return name; }
diff --git a/src/core/hle/service/apt_u.cpp b/src/core/hle/service/apt_u.cpp
index 1e6f1f78c..ccfd04591 100644
--- a/src/core/hle/service/apt_u.cpp
+++ b/src/core/hle/service/apt_u.cpp
@@ -69,8 +69,8 @@ void Initialize(Service::Interface* self) {
69 u32* cmd_buff = Kernel::GetCommandBuffer(); 69 u32* cmd_buff = Kernel::GetCommandBuffer();
70 70
71 // TODO(bunnei): Check if these are created in Initialize or on APT process startup. 71 // TODO(bunnei): Check if these are created in Initialize or on APT process startup.
72 notification_event = Kernel::Event::Create(RESETTYPE_ONESHOT, "APT_U:Notification").MoveFrom(); 72 notification_event = Kernel::Event::Create(RESETTYPE_ONESHOT, "APT_U:Notification");
73 pause_event = Kernel::Event::Create(RESETTYPE_ONESHOT, "APT_U:Pause").MoveFrom(); 73 pause_event = Kernel::Event::Create(RESETTYPE_ONESHOT, "APT_U:Pause");
74 74
75 cmd_buff[3] = Kernel::g_handle_table.Create(notification_event).MoveFrom(); 75 cmd_buff[3] = Kernel::g_handle_table.Create(notification_event).MoveFrom();
76 cmd_buff[4] = Kernel::g_handle_table.Create(pause_event).MoveFrom(); 76 cmd_buff[4] = Kernel::g_handle_table.Create(pause_event).MoveFrom();
@@ -512,13 +512,13 @@ Interface::Interface() {
512 file.ReadBytes(shared_font.data(), (size_t)file.GetSize()); 512 file.ReadBytes(shared_font.data(), (size_t)file.GetSize());
513 513
514 // Create shared font memory object 514 // Create shared font memory object
515 shared_font_mem = Kernel::SharedMemory::Create("APT_U:shared_font_mem").MoveFrom(); 515 shared_font_mem = Kernel::SharedMemory::Create("APT_U:shared_font_mem");
516 } else { 516 } else {
517 LOG_WARNING(Service_APT, "Unable to load shared font: %s", filepath.c_str()); 517 LOG_WARNING(Service_APT, "Unable to load shared font: %s", filepath.c_str());
518 shared_font_mem = nullptr; 518 shared_font_mem = nullptr;
519 } 519 }
520 520
521 lock = Kernel::Mutex::Create(false, "APT_U:Lock").MoveFrom(); 521 lock = Kernel::Mutex::Create(false, "APT_U:Lock");
522 522
523 Register(FunctionTable); 523 Register(FunctionTable);
524} 524}
diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp
index 7a18c1747..0f86894a6 100644
--- a/src/core/hle/service/dsp_dsp.cpp
+++ b/src/core/hle/service/dsp_dsp.cpp
@@ -201,8 +201,7 @@ const Interface::FunctionInfo FunctionTable[] = {
201// Interface class 201// Interface class
202 202
203Interface::Interface() { 203Interface::Interface() {
204 semaphore_event = Kernel::Event::Create(RESETTYPE_ONESHOT, 204 semaphore_event = Kernel::Event::Create(RESETTYPE_ONESHOT, "DSP_DSP::semaphore_event");
205 "DSP_DSP::semaphore_event").MoveFrom();
206 interrupt_event = nullptr; 205 interrupt_event = nullptr;
207 read_pipe_count = 0; 206 read_pipe_count = 0;
208 207
diff --git a/src/core/hle/service/gsp_gpu.cpp b/src/core/hle/service/gsp_gpu.cpp
index 936203318..495c117ee 100644
--- a/src/core/hle/service/gsp_gpu.cpp
+++ b/src/core/hle/service/gsp_gpu.cpp
@@ -187,7 +187,7 @@ static void RegisterInterruptRelayQueue(Service::Interface* self) {
187 187
188 g_interrupt_event = Kernel::g_handle_table.Get<Kernel::Event>(cmd_buff[3]); 188 g_interrupt_event = Kernel::g_handle_table.Get<Kernel::Event>(cmd_buff[3]);
189 _assert_msg_(GSP, (g_interrupt_event != nullptr), "handle is not valid!"); 189 _assert_msg_(GSP, (g_interrupt_event != nullptr), "handle is not valid!");
190 g_shared_memory = Kernel::SharedMemory::Create("GSPSharedMem").MoveFrom(); 190 g_shared_memory = Kernel::SharedMemory::Create("GSPSharedMem");
191 191
192 Handle shmem_handle = Kernel::g_handle_table.Create(g_shared_memory).MoveFrom(); 192 Handle shmem_handle = Kernel::g_handle_table.Create(g_shared_memory).MoveFrom();
193 193
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index b6e4861d2..7cb01729e 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -124,14 +124,14 @@ void PadUpdateComplete() {
124void HIDInit() { 124void HIDInit() {
125 using namespace Kernel; 125 using namespace Kernel;
126 126
127 g_shared_mem = SharedMemory::Create("HID:SharedMem").MoveFrom(); 127 g_shared_mem = SharedMemory::Create("HID:SharedMem");
128 128
129 // Create event handles 129 // Create event handles
130 g_event_pad_or_touch_1 = Event::Create(RESETTYPE_ONESHOT, "HID:EventPadOrTouch1").MoveFrom(); 130 g_event_pad_or_touch_1 = Event::Create(RESETTYPE_ONESHOT, "HID:EventPadOrTouch1");
131 g_event_pad_or_touch_2 = Event::Create(RESETTYPE_ONESHOT, "HID:EventPadOrTouch2").MoveFrom(); 131 g_event_pad_or_touch_2 = Event::Create(RESETTYPE_ONESHOT, "HID:EventPadOrTouch2");
132 g_event_accelerometer = Event::Create(RESETTYPE_ONESHOT, "HID:EventAccelerometer").MoveFrom(); 132 g_event_accelerometer = Event::Create(RESETTYPE_ONESHOT, "HID:EventAccelerometer");
133 g_event_gyroscope = Event::Create(RESETTYPE_ONESHOT, "HID:EventGyroscope").MoveFrom(); 133 g_event_gyroscope = Event::Create(RESETTYPE_ONESHOT, "HID:EventGyroscope");
134 g_event_debug_pad = Event::Create(RESETTYPE_ONESHOT, "HID:EventDebugPad").MoveFrom(); 134 g_event_debug_pad = Event::Create(RESETTYPE_ONESHOT, "HID:EventDebugPad");
135} 135}
136 136
137void HIDShutdown() { 137void HIDShutdown() {
diff --git a/src/core/hle/service/srv.cpp b/src/core/hle/service/srv.cpp
index b140e9fe3..cc59a03ce 100644
--- a/src/core/hle/service/srv.cpp
+++ b/src/core/hle/service/srv.cpp
@@ -23,7 +23,7 @@ static void GetProcSemaphore(Service::Interface* self) {
23 u32* cmd_buff = Kernel::GetCommandBuffer(); 23 u32* cmd_buff = Kernel::GetCommandBuffer();
24 24
25 // TODO(bunnei): Change to a semaphore once these have been implemented 25 // TODO(bunnei): Change to a semaphore once these have been implemented
26 event_handle = Kernel::Event::Create(RESETTYPE_ONESHOT, "SRV:Event").MoveFrom(); 26 event_handle = Kernel::Event::Create(RESETTYPE_ONESHOT, "SRV:Event");
27 event_handle->Clear(); 27 event_handle->Clear();
28 28
29 cmd_buff[1] = 0; // No error 29 cmd_buff[1] = 0; // No error
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 8bfa1428e..34a27917f 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -261,7 +261,7 @@ static ResultCode WaitSynchronizationN(s32* out, Handle* handles, s32 handle_cou
261static ResultCode CreateAddressArbiter(Handle* out_handle) { 261static ResultCode CreateAddressArbiter(Handle* out_handle) {
262 using Kernel::AddressArbiter; 262 using Kernel::AddressArbiter;
263 263
264 CASCADE_RESULT(SharedPtr<AddressArbiter> arbiter, AddressArbiter::Create()); 264 SharedPtr<AddressArbiter> arbiter = AddressArbiter::Create();
265 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(arbiter))); 265 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(arbiter)));
266 LOG_TRACE(Kernel_SVC, "returned handle=0x%08X", *out_handle); 266 LOG_TRACE(Kernel_SVC, "returned handle=0x%08X", *out_handle);
267 return RESULT_SUCCESS; 267 return RESULT_SUCCESS;
@@ -366,7 +366,7 @@ static ResultCode SetThreadPriority(Handle handle, s32 priority) {
366static ResultCode CreateMutex(Handle* out_handle, u32 initial_locked) { 366static ResultCode CreateMutex(Handle* out_handle, u32 initial_locked) {
367 using Kernel::Mutex; 367 using Kernel::Mutex;
368 368
369 CASCADE_RESULT(SharedPtr<Mutex> mutex, Mutex::Create(initial_locked != 0)); 369 SharedPtr<Mutex> mutex = Mutex::Create(initial_locked != 0);
370 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(mutex))); 370 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(mutex)));
371 371
372 LOG_TRACE(Kernel_SVC, "called initial_locked=%s : created handle=0x%08X", 372 LOG_TRACE(Kernel_SVC, "called initial_locked=%s : created handle=0x%08X",
@@ -434,7 +434,9 @@ static ResultCode QueryMemory(void* info, void* out, u32 addr) {
434 434
435/// Create an event 435/// Create an event
436static ResultCode CreateEvent(Handle* out_handle, u32 reset_type) { 436static ResultCode CreateEvent(Handle* out_handle, u32 reset_type) {
437 CASCADE_RESULT(auto evt, Kernel::Event::Create(static_cast<ResetType>(reset_type))); 437 using Kernel::Event;
438
439 SharedPtr<Event> evt = Kernel::Event::Create(static_cast<ResetType>(reset_type));
438 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(evt))); 440 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(evt)));
439 441
440 LOG_TRACE(Kernel_SVC, "called reset_type=0x%08X : created handle=0x%08X", 442 LOG_TRACE(Kernel_SVC, "called reset_type=0x%08X : created handle=0x%08X",
@@ -451,9 +453,10 @@ static ResultCode DuplicateHandle(Handle* out, Handle handle) {
451 453
452/// Signals an event 454/// Signals an event
453static ResultCode SignalEvent(Handle handle) { 455static ResultCode SignalEvent(Handle handle) {
456 using Kernel::Event;
454 LOG_TRACE(Kernel_SVC, "called event=0x%08X", handle); 457 LOG_TRACE(Kernel_SVC, "called event=0x%08X", handle);
455 458
456 auto evt = Kernel::g_handle_table.Get<Kernel::Event>(handle); 459 SharedPtr<Event> evt = Kernel::g_handle_table.Get<Kernel::Event>(handle);
457 if (evt == nullptr) 460 if (evt == nullptr)
458 return ERR_INVALID_HANDLE; 461 return ERR_INVALID_HANDLE;
459 462
@@ -464,9 +467,10 @@ static ResultCode SignalEvent(Handle handle) {
464 467
465/// Clears an event 468/// Clears an event
466static ResultCode ClearEvent(Handle handle) { 469static ResultCode ClearEvent(Handle handle) {
470 using Kernel::Event;
467 LOG_TRACE(Kernel_SVC, "called event=0x%08X", handle); 471 LOG_TRACE(Kernel_SVC, "called event=0x%08X", handle);
468 472
469 auto evt = Kernel::g_handle_table.Get<Kernel::Event>(handle); 473 SharedPtr<Event> evt = Kernel::g_handle_table.Get<Kernel::Event>(handle);
470 if (evt == nullptr) 474 if (evt == nullptr)
471 return ERR_INVALID_HANDLE; 475 return ERR_INVALID_HANDLE;
472 476
@@ -478,7 +482,7 @@ static ResultCode ClearEvent(Handle handle) {
478static ResultCode CreateTimer(Handle* out_handle, u32 reset_type) { 482static ResultCode CreateTimer(Handle* out_handle, u32 reset_type) {
479 using Kernel::Timer; 483 using Kernel::Timer;
480 484
481 CASCADE_RESULT(auto timer, Timer::Create(static_cast<ResetType>(reset_type))); 485 SharedPtr<Timer> timer = Timer::Create(static_cast<ResetType>(reset_type));
482 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(timer))); 486 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(timer)));
483 487
484 LOG_TRACE(Kernel_SVC, "called reset_type=0x%08X : created handle=0x%08X", 488 LOG_TRACE(Kernel_SVC, "called reset_type=0x%08X : created handle=0x%08X",
@@ -552,7 +556,7 @@ static ResultCode CreateMemoryBlock(Handle* out_handle, u32 addr, u32 size, u32
552 using Kernel::SharedMemory; 556 using Kernel::SharedMemory;
553 // TODO(Subv): Implement this function 557 // TODO(Subv): Implement this function
554 558
555 CASCADE_RESULT(auto shared_memory, SharedMemory::Create()); 559 SharedPtr<SharedMemory> shared_memory = SharedMemory::Create();
556 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(shared_memory))); 560 CASCADE_RESULT(*out_handle, Kernel::g_handle_table.Create(std::move(shared_memory)));
557 561
558 LOG_WARNING(Kernel_SVC, "(STUBBED) called addr=0x%08X", addr); 562 LOG_WARNING(Kernel_SVC, "(STUBBED) called addr=0x%08X", addr);