diff options
| author | 2018-12-04 12:25:40 -0500 | |
|---|---|---|
| committer | 2018-12-04 12:25:40 -0500 | |
| commit | d5337676233d2493eefd895901ef499fc49023d9 (patch) | |
| tree | d1769fdd7a74f5a4abd4d4aa9d86d8493d1c4dc9 /src/core/hle/kernel/svc.cpp | |
| parent | Rewrited TEX/TEXS (TEX Scalar). (#1826) (diff) | |
| parent | kernel/object: Amend handle types to distinguish between readable and writabl... (diff) | |
| download | yuzu-d5337676233d2493eefd895901ef499fc49023d9.tar.gz yuzu-d5337676233d2493eefd895901ef499fc49023d9.tar.xz yuzu-d5337676233d2493eefd895901ef499fc49023d9.zip | |
Merge pull request #1853 from lioncash/event
kernel/object: Amend handle types to distinguish between readable and writable events
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) { |