diff options
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index b022a7bc5..812b32005 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -1602,14 +1602,21 @@ static ResultCode ClearEvent(Handle handle) { | |||
| 1602 | LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); | 1602 | LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); |
| 1603 | 1603 | ||
| 1604 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1604 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1605 | SharedPtr<ReadableEvent> evt = handle_table.Get<ReadableEvent>(handle); | 1605 | |
| 1606 | if (evt == nullptr) { | 1606 | auto writable_event = handle_table.Get<WritableEvent>(handle); |
| 1607 | LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); | 1607 | if (writable_event) { |
| 1608 | return ERR_INVALID_HANDLE; | 1608 | writable_event->Clear(); |
| 1609 | return RESULT_SUCCESS; | ||
| 1609 | } | 1610 | } |
| 1610 | 1611 | ||
| 1611 | evt->Clear(); | 1612 | auto readable_event = handle_table.Get<ReadableEvent>(handle); |
| 1612 | return RESULT_SUCCESS; | 1613 | if (readable_event) { |
| 1614 | readable_event->Clear(); | ||
| 1615 | return RESULT_SUCCESS; | ||
| 1616 | } | ||
| 1617 | |||
| 1618 | LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); | ||
| 1619 | return ERR_INVALID_HANDLE; | ||
| 1613 | } | 1620 | } |
| 1614 | 1621 | ||
| 1615 | static ResultCode GetProcessInfo(u64* out, Handle process_handle, u32 type) { | 1622 | static ResultCode GetProcessInfo(u64* out, Handle process_handle, u32 type) { |