diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 1cac1d0c9..5ebe2eca4 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp | |||
| @@ -67,10 +67,13 @@ ResultCode HLERequestContext::PopulateFromIncomingCommandBuffer(const u32_le* sr | |||
| 67 | ASSERT(i + num_handles <= command_size); // TODO(yuriks): Return error | 67 | ASSERT(i + num_handles <= command_size); // TODO(yuriks): Return error |
| 68 | for (u32 j = 0; j < num_handles; ++j) { | 68 | for (u32 j = 0; j < num_handles; ++j) { |
| 69 | Handle handle = src_cmdbuf[i]; | 69 | Handle handle = src_cmdbuf[i]; |
| 70 | SharedPtr<Object> object = src_table.GetGeneric(handle); | 70 | SharedPtr<Object> object = nullptr; |
| 71 | ASSERT(object != nullptr); // TODO(yuriks): Return error | 71 | if (handle != 0) { |
| 72 | if (descriptor == IPC::DescriptorType::MoveHandle) { | 72 | object = src_table.GetGeneric(handle); |
| 73 | src_table.Close(handle); | 73 | ASSERT(object != nullptr); // TODO(yuriks): Return error |
| 74 | if (descriptor == IPC::DescriptorType::MoveHandle) { | ||
| 75 | src_table.Close(handle); | ||
| 76 | } | ||
| 74 | } | 77 | } |
| 75 | 78 | ||
| 76 | cmd_buf[i++] = AddOutgoingHandle(std::move(object)); | 79 | cmd_buf[i++] = AddOutgoingHandle(std::move(object)); |
| @@ -112,9 +115,11 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(u32_le* dst_cmdbuf, P | |||
| 112 | ASSERT(i + num_handles <= command_size); | 115 | ASSERT(i + num_handles <= command_size); |
| 113 | for (u32 j = 0; j < num_handles; ++j) { | 116 | for (u32 j = 0; j < num_handles; ++j) { |
| 114 | SharedPtr<Object> object = GetIncomingHandle(cmd_buf[i]); | 117 | SharedPtr<Object> object = GetIncomingHandle(cmd_buf[i]); |
| 115 | 118 | Handle handle = 0; | |
| 116 | // TODO(yuriks): Figure out the proper error handling for if this fails | 119 | if (object != nullptr) { |
| 117 | Handle handle = dst_table.Create(object).Unwrap(); | 120 | // TODO(yuriks): Figure out the proper error handling for if this fails |
| 121 | handle = dst_table.Create(object).Unwrap(); | ||
| 122 | } | ||
| 118 | dst_cmdbuf[i++] = handle; | 123 | dst_cmdbuf[i++] = handle; |
| 119 | } | 124 | } |
| 120 | break; | 125 | break; |