summaryrefslogtreecommitdiff
path: root/src/core/hle/svc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/svc.cpp')
-rw-r--r--src/core/hle/svc.cpp40
1 files changed, 29 insertions, 11 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 95403644b..0c50f0d5b 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -447,11 +447,17 @@ static Result QueryMemory(void* info, void* out, u32 addr) {
447} 447}
448 448
449/// Create an event 449/// Create an event
450static Result CreateEvent(Handle* evt, u32 reset_type) { 450static Result CreateEvent(Handle* handle, u32 reset_type) {
451 *evt = Kernel::CreateEvent((ResetType)reset_type); 451 auto evt_res = Kernel::Event::Create(static_cast<ResetType>(reset_type));
452 LOG_TRACE(Kernel_SVC, "called reset_type=0x%08X : created handle=0x%08X", 452 if (evt_res.Failed())
453 reset_type, *evt); 453 return evt_res.Code().raw;
454 return 0; 454 auto handle_res = Kernel::g_handle_table.Create(evt_res.MoveFrom());
455 if (handle_res.Failed())
456 return handle_res.Code().raw;
457 *handle = handle_res.MoveFrom();
458
459 LOG_TRACE(Kernel_SVC, "called reset_type=0x%08X : created handle=0x%08X", reset_type, *handle);
460 return RESULT_SUCCESS.raw;
455} 461}
456 462
457/// Duplicates a kernel handle 463/// Duplicates a kernel handle
@@ -465,16 +471,28 @@ static Result DuplicateHandle(Handle* out, Handle handle) {
465} 471}
466 472
467/// Signals an event 473/// Signals an event
468static Result SignalEvent(Handle evt) { 474static Result SignalEvent(Handle handle) {
469 LOG_TRACE(Kernel_SVC, "called event=0x%08X", evt); 475 LOG_TRACE(Kernel_SVC, "called event=0x%08X", handle);
476
477 auto evt = Kernel::g_handle_table.Get<Kernel::Event>(handle);
478 if (evt == nullptr)
479 return InvalidHandle(ErrorModule::Kernel).raw;
480
481 evt->Signal();
470 HLE::Reschedule(__func__); 482 HLE::Reschedule(__func__);
471 return Kernel::SignalEvent(evt).raw; 483 return RESULT_SUCCESS.raw;
472} 484}
473 485
474/// Clears an event 486/// Clears an event
475static Result ClearEvent(Handle evt) { 487static Result ClearEvent(Handle handle) {
476 LOG_TRACE(Kernel_SVC, "called event=0x%08X", evt); 488 LOG_TRACE(Kernel_SVC, "called event=0x%08X", handle);
477 return Kernel::ClearEvent(evt).raw; 489
490 auto evt = Kernel::g_handle_table.Get<Kernel::Event>(handle);
491 if (evt == nullptr)
492 return InvalidHandle(ErrorModule::Kernel).raw;
493
494 evt->Clear();
495 return RESULT_SUCCESS.raw;
478} 496}
479 497
480/// Creates a timer 498/// Creates a timer