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 948989b31..d2d893992 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -1575,14 +1575,21 @@ static ResultCode ClearEvent(Handle handle) { | |||
| 1575 | LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); | 1575 | LOG_TRACE(Kernel_SVC, "called, event=0x{:08X}", handle); |
| 1576 | 1576 | ||
| 1577 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); | 1577 | const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
| 1578 | SharedPtr<ReadableEvent> evt = handle_table.Get<ReadableEvent>(handle); | 1578 | |
| 1579 | if (evt == nullptr) { | 1579 | auto writable_event = handle_table.Get<WritableEvent>(handle); |
| 1580 | LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); | 1580 | if (writable_event) { |
| 1581 | return ERR_INVALID_HANDLE; | 1581 | writable_event->Clear(); |
| 1582 | return RESULT_SUCCESS; | ||
| 1582 | } | 1583 | } |
| 1583 | 1584 | ||
| 1584 | evt->Clear(); | 1585 | auto readable_event = handle_table.Get<ReadableEvent>(handle); |
| 1585 | return RESULT_SUCCESS; | 1586 | if (readable_event) { |
| 1587 | readable_event->Clear(); | ||
| 1588 | return RESULT_SUCCESS; | ||
| 1589 | } | ||
| 1590 | |||
| 1591 | LOG_ERROR(Kernel_SVC, "Event handle does not exist, handle=0x{:08X}", handle); | ||
| 1592 | return ERR_INVALID_HANDLE; | ||
| 1586 | } | 1593 | } |
| 1587 | 1594 | ||
| 1588 | static ResultCode GetProcessInfo(u64* out, Handle process_handle, u32 type) { | 1595 | static ResultCode GetProcessInfo(u64* out, Handle process_handle, u32 type) { |